[PHP] Schluss-Tag weglassen

Jogibaer_2000

GFX, Slots & mehr
ID: 152372
L
15 Mai 2006
2.175
265
Hallo!

Ich habe gestern PHP-Dateien gesehen, wo einfach der Schluss-Tag ?> weggelassen wurde. Ist das richtig? Kann man den einfach weglassen?

Wenn man das nicht machen darf, was kann passieren, wenn es doch so ist?
 
Laut Dokumentation gehört der End-Tag hin. Im Moment treten keine Probleme auf, wenn man ihn weglässt, aber warum sollte man das tun? Man riskiert bloß, dass das Script nicht mehr funktioniert, denn irgendwann wird das vorraussichtlich geändert.
 
Naja, wurden sie wirklich weggelassen?

Oder war am ende veleicht HTML und somit wurden die vorher geschlossen?
 
Ich habe gestern PHP-Dateien gesehen, wo einfach der Schluss-Tag ?> weggelassen wurde.
Irgendwie brennt mir die Frage unter den Nägeln, was das für PHP-Dateien waren und wer sie geschrieben hat, aber andererseits will ich das gar nicht so genau wissen :roll:
Ist das richtig? Kann man den einfach weglassen?
Es scheint "richtig" zu sein, der Parser meckert nicht, d.h. er prüft nicht, ob ein schließendes PHP-Tag da is.
 
Irgendwie brennt mir die Frage unter den Nägeln, was das für PHP-Dateien waren und wer sie geschrieben hat, aber andererseits will ich das gar nicht so genau wissen :roll:
Es scheint "richtig" zu sein, der Parser meckert nicht, d.h. er prüft nicht, ob ein schließendes PHP-Tag da is.

Also ich (absoluter noob) habe mir die Dateien mal angeschaut.

Die "Haupt"datei wird ganz normal <? geöffnet und mit ?> geschlossen.

In dieser "Haupt"datei wird in einem Case via include eine Unterdatei aufgerufen
welche mit <? geöffnet wird aber nicht geschlossen wird.

Ich als Noob würde jetzt denken OK dann wird zum schliessen das ?> von der Hauptdatei verwendet.... nur wissen .... nicht wirklich konnte zumindest in keiner Doku etwas darüber finden :-?
 
Die "Haupt"datei wird ganz normal <? geöffnet und mit ?> geschlossen.

In dieser "Haupt"datei wird in einem Case via include eine Unterdatei aufgerufen
welche mit <? geöffnet wird aber nicht geschlossen wird.

Ich als Noob würde jetzt denken OK dann wird zum schliessen das ?> von der Hauptdatei verwendet.... nur wissen .... nicht wirklich konnte zumindest in keiner Doku etwas darüber finden :-?

sollte schon funktionieren wie du es sagst. wenn ich dateien include hab ich dort aber entweder reines html drinne oder auch php mit beiden tags (<? ?>)

ansonsten bräuchte er ja den öffnenden tag auch nicht zwingend in der includierten seite
 
sollte schon funktionieren wie du es sagst. wenn ich dateien include hab ich dort aber entweder reines html drinne oder auch php mit beiden tags (<? ?>)

ansonsten bräuchte er ja den öffnenden tag auch nicht zwingend in der includierten seite


Also wie gesagt die Unterdatei wird nicht geschlossen, die wiederum bindet eine andere Datei Case via include ein, die aber auch nicht geschlossen wird.
Es wird sicherlich im default über eine variable eine tpl Datei aufgerufen,
aber es wird also nur die Hauptdatei geschlossen.

Naja wie dem auch sei ich werde jetzt erstmal arbeiten gehen.:-?


Danke für eure Antworten .... denke auch im Namen von Jogi :)
 
Ja, vielen Dank für eure Antworten.

Anscheinend ist das dann also Wurscht, ob die PHP-Dateien, welche included wurden geschlossen werden oder nicht. Schon ganz schön verwirrend diese ganze Geschichte. :roll:
 
Inwiefern "größter Schwachsinn"? Wenn es doch egal ist, ob die 2 Zeichen da stehen oder nicht, dann kann man die doch weglassen um die Dateien klein zu halten (sind ja immerhin ein paar Byte). :biggrin:
 
Du kannst auch in HTML Codes das einrücken weglassen, alles hintereinander schreiben ohne zeilenumbruch... und danach kannst du, wenn du schonmal dabei bist, die ganzen " in den HTML Tags weglassen...

Der nächste der an des Skript muss, schmeißt dir deinen Code.. ne.. "kot" um die ohren ;)
 
Um mich mal zu zitieren:
Man riskiert bloß, dass das Script nicht mehr funktioniert, denn irgendwann wird das vorraussichtlich geändert.

Man kann sich auch sparen, Variablen ordentlich zu deklarieren oder sowas, schließlich werden Notices ja per default nicht angezeigt. Aber nicht alles was funktioniert ist deswegen automatisch richtig, und die php-Leute sind nicht zimperlich damit, bei einer Versionsumstellung mal so nebenbei alle alten Scripte außer Gefecht zu setzen, die auf der Ausnutzung einer hohen Fehlertoleranz beruhen. Wenn man mit sehr wenig Aufwand ordentlich programmieren kann, sollte sich die Frage überhaupt nicht stellen, ob man es auch wirklich tut.
 
Wenn du das so sehen kannst, dass man PHP auch wie folgt einleiten kann:

HTML:
<html>
<head>
</head>
<body>
<script language="php">
echo 'dies ist ein Test';
</script>
</body>
</html>

Das ist nicht ganz richtig. Denn der Interpreter bekommt weder <? noch ?> zu Gesicht. Wie man in diesem Fall sieht, bekommt der Interbreter nur den Befehl echo ... zugewiesen. Ein Parser filter vorher die Code eigenschaften heraus.

Von daher ist das egal!

PHP:
<?
echo 'dies ist ein Test';

Wäre also nicht unrichtig, wenn nach der echo Zeile kein HTML Code stehen würde. Ich kenne viele Include Dateien, die so aufgebaut sind. Denn das Ende einer Datei wir genau so behandelt wie ?> Das sollte ja klar sein. Deswegen ist das dem Parser Jacke wie Hose. Und das wird auch so bleiben, weil er logischer weise nicht über das Ende einer Datei raus kann, ohne bei einer includation auf erneute einleitung <? zu verzichten. In welcher Form die Einleitung ist

<?

<?php

<%

oder

<script...

spielt keine Rolle. Der Parser sucht nach diesen Elementen. Alles was jedoch mit ?> ausgegeben wird wandelt in die Ausgabe. Es ist nichts anderes wie ein Echo Befehl.

Da Schleifen nicht über includierte Dateien beendet werden können, ist dies dem Parser schnuppe. Der Interpreter selbst bekommt werder Einleitung noch Ausleitung zu Gesicht! Die Ausleitung ?> /script> %> wir daher nur für den Parser gebraucht um zu sagen, hier ist Ende für den Interpreter.

Das Ende einer Datei tut genau das Gleiche. <? etc..weist an zu interpretieren. Während ?> etc.. das Ende markiert. ?> bedeutet nichts anderes wie nachfolgendes ausgeben.

Um das zu beweisen wird auch das interpretiert:

PHP:
<html>
<head>
</head>
<body>
<script language="php">
echo 'dies ist ein Test';
?>
</body>
</html>

Wenn es auch unlogisch aussieht. Aber weder <script language="php"> noch das eigentliche falsche ?> wird der Parser zu Gesicht bekommen.

P.s. Sorry meine D-Taste Klemmt!

Das Anfang einer Datei ist daher immer Ausgabe. Wer reinen HTML Code includiert, der bekommt dem Inhalt an der includations Stelle ausgegeben.
 
Zuletzt bearbeitet:
In welcher Form die Einleitung ist

<?

<?php

<%

oder

<script...

spielt keine Rolle. Der Parser sucht nach diesen Elementen

Das stimmt so nicht ganz. Welche öffnenden Tags akzeptiert werden, hängt von der PHP-Konfiguration auf dem Server ab. <?php funktioniert immer, die anderen Varianten können deaktiviert werden.