Guten Tag zusammen, ich habe gelesen, daß session_start() immer als erstes gesendet werden muß, sonst werde ein Fehler hervorgerufen. Nun habe ich versuchsweise (lokale Testumgebung, localhost) die Funktion session_start() nach dem html-head notiert und trotzdem wird ein Session-Cookie angelegt und kein Fehler angezeigt. Hab’ ich einfach nur Glück oder liegts vielleicht am localhost?
Willkommen im Forum.
session_start setzt einen (oder vielleicht auch mehrere) Header in der HTTP-Response, die von einem Server an einen Client geschickt wird. Die Header stehen in der Response per Definition vor dem eigentlichen – zum Beispiel – HTML-Code.
Da in den meisten Konfigurationen die Ausgabe von HTML-Code direkt als Response gesendet wird, müssen vor der ersten Ausgabe die Header geschickt werden und können nach dem Absenden dann logischerweise nicht mehr bearbeitet werden.
Es wäre allerdings möglich, die Ausgabe serverseitig zu buffern und erst am Ende des Scriptablaufs zu senden. In diesem Fall kann über die gesamte Laufzeit hinweg etwas an den Headern verändert werden.
Kann sein, dass das bei dir passiert. Kann auch sein, dass du lediglich ein zu niedriges error_reporting-Level eingestellt hast und den Fehler nicht siehst, den session_start erzeugt.
XAMPP unter Windows hat in der php.ini ein output_buffering von 4096 Bytes eingestellt. Also ein automatisches ob_start(). Ist der gesendete Inhalt vor session_start() also kleiner 4096 Bytes, sollte session_start() dennoch funktionieren.
Das wird wahrscheinlich den Fehler unterdrücken, selbst wenn das Fehler-Level ausreichend hoch ist.
Wohl müßig zu erwähnen, dass das alles aber kein Grund sein sollte, session_start irgendwo mitten in die Ausgabe zu setzen.
Danke für die guten Erklärungen, von dem Puffer steht nichts in meinem Buch. Das Error-Reporting-Level steht übrigens auf „all“. Und es ist auch klar, daß ich im Echtbetrieb die Session-Initialisierung ganz zu Anfang der Datei vornehme, aber ich wollte ja während des Lernens den Fehler provozieren.