"?>" am Ende einer PHP-Datei erforderlich?

OP #7522620
Lesenswert?

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.

#7522901
Lesenswert?

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.

(Firma: Funkenflug Industries) #7522902
Lesenswert?

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.

(Firma: Funkenflug Industries) #7531125
Lesenswert?

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.

Beitrag #7531842 wurde von einem Moderator gelöscht.
(Firma: Funkenflug Industries) #7532417
Lesenswert?

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.

#7532487
Lesenswert?

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.

Gast #7532528
Lesenswert?

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.

Gast #7532553
Lesenswert?

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;-)

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren