Siehe Betreff. Ich habe versucht, Google zu befragen. Aber wie manch andere vielleicht schon festgestellt haben, bekommt man auf derartige Anfragen kein sinnvolles Ergebnis. Hintergrund: Ich erzeuge mit PHP eine Bilddatei (PNG). Manche Texteditoren fügen ungefragt einen Zeilenumbruch bzw. eine Leerzeile an das Ende der Datei. Wenn ich "?>" am Ende einfüge, landet die folgende Leerzeile in der Bilddatei, was nicht zulässig ist.
Xxx X. schrieb: > Ich erzeuge mit PHP eine Bilddatei (PNG). Manche > Texteditoren fügen ungefragt einen Zeilenumbruch bzw. eine Leerzeile an > das Ende der Datei. Was hat die Bilddatei mit dem Texteditor zu tun? Abgesehen davon: Für den Zeilenumbruch am Dateiende hat jeder halbwegs aktuelle Editor ein Setting.
> Nein: > https://www.php.net/manual/en/language.basic-syntax.instruction-separation.php#:~:text=The%20closing%20tag%20of%20a%20PHP%20block%20at%20the%20end,headers%20to%20the%20response%20later. Note: The closing tag of a PHP block at the end of a file is optional, and in some cases omitting it is helpful when using include or require, so unwanted whitespace will not occur at the end of files, and you will still be able to add headers to the response later. It is also handy if you use output buffering, and would not like to see added unwanted whitespace at the end of the parts generated by the included files.
Er meint das Problem, daß die Webserver/PHP-Kombination eine jede Datei erstmal - egal wie sie heißt - als HTML behandelt, dann den Teil zwischen den PHP-Tags (<?php und ?>) gegen den Rückgabewert des PHP-Scripts austauscht und das entstandene Dokument abschickt. Alles was nach dem ?> in der PHP-Datei steht, wird so wie es ist nach der PHP-Ausgabe mit übertragen. Also aus
1 | Der Korb enthält <?php echo 1+1; ?> Birnen. |
wird
1 | Der Korb enthält 2 Birnen. |
Normalerweise ist das bei Bilddateien aber kein Problem, bzw. man kann seine Dateien ja daraufhin testen und das störende Zeilenende entfernen.
Ich empfehle : https://www.php.net, resp https://www.php.net/manual/en/index.php
:
Bearbeitet durch User
>>Der Korb enthält <?php echo 1+1; ?> Birnen.
So programmiert man seit 10 Jahren kein php mehr. Das Beispiel bleibt
natürlich richtig :)
Jonas B. schrieb: >>>Der Korb enthält <?php echo 1+1; ?> Birnen. > > So programmiert man seit 10 Jahren kein php mehr. Das Beispiel bleibt > natürlich richtig :) True, wenngleich: so hat man schon vor 20 Jahren kein PHP mehr geschrieben. Nichtsdestotrotz zeigt das Beispiel: PHP ist primär eine Template-Engine.
Ja, ich weiß, heute muss man mindestens 3000% Overhead erzeugen, beispielsweise jede Funktion aus einer eigenen Datei includieren. Alles was nicht mindestes 300 Dateien und 50 Unterverzeichnisse benötigt, ist kein echtes Programm und darf keinesfalls so genannt werden. 30 gleichzeitig benutzte Frameworks und Extensions helfen dabei sehr. Die Kommentare müssen mindestens den fünffachen Platz beanspruchen wie der Code und am besten schreibt man einfach das genaue Gegenteil von dem hinein, was direkt aus dem Code ersichtlich wäre. Mit all diesen Grundsätzen ist zuverlässig sichergestellt, daß auch ja kein anderer mehr das Projekt überblicken kann und die Performance so richtig in den Keller geht. Anders lässt sich kein Bedarf nach neuer Server-Hardware generieren. Sorry, aber das sind doch Stilfragen. Das macht sowieso jeder anders bzw. so wie er will oder wie es vorgegeben wird, danach kommt noch der irre Kleinkrieg bezüglich funktionaler oder objektorientierter Programmierung und natürlich würde jeder lieber sterben anstatt zuzugeben, daß die jeweils andere Möglichkeit auch ihre Vorteile und Daseinsberechtigung hat - was dazu führt, daß am Ende alle den gleichen Tod sterben, aber jeder auf seine eigene Weise.
:
Bearbeitet durch User
Ben B. schrieb: > was dazu führt, daß am Ende alle den gleichen > Tod sterben, aber jeder auf seine eigene Weise. Das ist aber irgendwie auch wieder beruhigend, oder?
Schreib einfach ein exit; ans Ende und Problem gelöst. Normalerweise wird ein Zeilenumbruch nach ?> von Php unterdrückt.
:
Bearbeitet durch User
Beitrag #7531842 wurde vom Autor gelöscht.
PHP kann keinen Zeilenumbruch nach ?> unterdrücken, weil der im HTML-Container steht und PHP den gar nicht erst sieht.
Ben B. schrieb: > PHP kann keinen Zeilenumbruch nach ?> unterdrücken, > weil der im HTML-Container steht und PHP den gar nicht erst sieht. Wenn es um eine PHP-Datei geht, und nicht um in HTML eingebettetes PHP, sollte das anders aussehen.
Wie willst Du das anstellen? Für den Webserver ist grundsätzlich alles plain Text erstmal HTML, egal ob es .PHP heißt, .HTML, .XHTML, .PHTML oder irgendwie anders. Es ist noch nicht mal XHTML oder so, sondern das wird es alles erst durch das, was im Header steht und nur der Browser interessiert sich dafür, der Webserver nicht im Geringsten. Edit: Ein Umweg würde vielleicht funktionieren, wenn man das gewünschte Bild mit PHP generiert, es auf die Serverplatte schreibt und dann vom Browser direkt vom Webserver laden lässt, dann ist die Bilddatei "sauber". Aber das wäre ein ziemlicher Sackstand, man braucht gleich dazu noch ein Script was da regelmäßig aufräumt, so daß man die Platte nicht zumüllt. Da entferne ich lieber manuell einen störenden Zeilenumbruch am Ende einer bilderzeugenden .PHP-Datei oder lasse das ?> Tag weg, auch wenn's irgendwie unsauber aussieht.
:
Bearbeitet durch User
Ben B. schrieb: > Es ist noch nicht mal XHTML oder so, sondern das > wird es alles erst durch das, was im Header steht und nur der Browser > interessiert sich dafür, der Webserver nicht im Geringsten. Du übersiehst, daß PHP auf dem Webserver und nicht im Browser ausgeführt wird. Der Browser bekommt PHP überhaupt nicht zu sehen.
Harald K. schrieb: > Wenn es um eine PHP-Datei geht, und nicht um in HTML eingebettetes PHP, > sollte das anders aussehen. PHP Code macht nur in einer.php Datei Sinn weil die Codeblöcke ansonsten nicht vom PHP Modul des Webservers verarbeitet werden. Das PHP Modul greift alle Blöcke raus, ersetzt diese durch eigene Ausgaben und schickt dann erst das gesamte Dokument als Output. Dabei greift es die Blicke inkl. optional einem Zeilenumbruch heraus. <?php...?>\n<?php...?> Ist das selbe wie <?php...?><?php...?> Aber nicht wie <?php...?> <?php...?> \n steht hier für einen Zeilenumbruch. Ich weiß nicht, wieso ein echter Zeilenumbruch in diesem Forum nicht angezeigt wird.
:
Bearbeitet durch User
Daniel D. schrieb: > Ich weiß nicht, wieso ein echter > Zeilenumbruch in diesem Forum nicht angezeigt wird Packe Deinen Text in [ pre ] [ /pre ] Tags (ohne Leerzeichen nach/vor den Klammern)
Chat GPT Antwort auf die Frage "?>" am Ende einer PHP-Datei erforderlich? Nein, das Zeichen "?>" am Ende einer PHP-Datei ist nicht erforderlich. In der Regel wird empfohlen, das schließende PHP-Zeichen "?>" am Ende einer PHP-Datei wegzulassen. Der Grund dafür ist, dass das Vorhandensein von Leerzeichen oder Zeilenumbrüchen nach dem schließenden PHP-Zeichen dazu führen kann, dass unerwünschter Text an die Ausgabe gesendet wird, was zu unerwartetem Verhalten führen kann. Da PHP-Dateien, die nur PHP-Code enthalten, am Ende keinen schließenden Tag benötigen, wird empfohlen, das schließende PHP-Zeichen wegzulassen, um solche Probleme zu vermeiden.
tja, aber dummerweise ist die Antwort richtig und klar mit nein beantwortet worden und somit ist dein Kommentar überflüssig;-)
ChatGPT sollte man nie glauben. Was, wenn ich so eine Datei mittels require in eine andere einbinde? Dann gibt's n Problem. ChaGPT ist nicht dazu da, das man klüger wird, sondern dass man lernt, dass man schon klüger ist.
:
Bearbeitet durch User
Google und Foren sollte man auch nicht einfach glauben. Man sollte immer verifizieren... Ob es beim Einbinden in Dateien ein Problem gibt, kannst du ja ChatGPT ebenfalls fragen und dieses dann ebenfalls natürlich überprüfen. Oftmals Antwortet CGPT aber bereits auf die erste Frage richtig und das verifizieren geht dann schnell. Bei Google sucht man dann ewig und muss es dann dennoch auch verifizieren. Klug ist der kluges tut;-)
Und den Beiträgen hier sollte man... Naja du weißt schon. Und dennoch: ChatGPT ist mit Uraltdaten gefüttert. Ich glaube nicht daß "empfohlen wird auf das schließen des Php Blocks am Dateiende zu verzichten" noch aktuell ist. Quelle dafür?
Die Begründung dafür wurde ja genannt. Quellen findest du bestimmt bei google und nein, die Daten sind nicht "uralt".... Sowas ändert sich aber auch nicht jedes Jahr...
Daniel D. schrieb: > ChatGPT sollte man nie glauben. > Was, wenn ich so eine Datei mittels require in eine andere einbinde? > Dann gibt's n Problem. Nein, das geht einwandfrei.
Also, Include Include_once Require Require_once geht bei php-Dateien ohne Endtag auf m Apachen in PHP 8 bei mir einwandfrei
Daniel D. schrieb: > Ich glaube nicht daß "empfohlen wird auf das schließen des Php Blocks am > Dateiende zu verzichten" noch aktuell ist. Quelle dafür? https://www.php.net/manual/en/language.basic-syntax.instruction-separation.php
Ok, überzeugt. (auch wenn das seit über 20 Jahren noch nie ungewollten Whitespace bei mir erzeugt hat. Ich bin halt grundsätzlich für "vollständigen" Code)
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.