00 Stimmen

PHP Fehler: Cannot send session cache limiter - headers already sent

Frage von SmartUser | 09.01.2012 um 19:47

Neuerdings bekomme ich in einem PHP Skript von mir folgenden Fehler, den ich mir nicht erklären kann:

Warning: session_start() [function.session-start]:
Cannot send session cache limiter - headers already sent
(output started at index.php:1) in index.php on line 5

Soweit ich weiß habe ich nichts an den beteiligten Dateien geändert, aber plötzlich funktioniert mein PHP Skript nicht mehr und endet immer mit dieser Fehlermeldung. Kann mir das jemand erklären?

AntwortenPositivNegativDatumStimmen
2Beste Antwort2 Stimmen

Du kannst mit der Funktion session_start() nur dann eine Session starten, wenn noch keine Informationen gesendet wurden. Das heißt, vor dem session_start() dürfen keine Zeichen mit echo ausgegeben werden und es darf kein HTML-Code oder Text außerhalb dem PHP-Code erscheinen, nicht einmal ein Leerzeichen. Deine Datei mit dem Code muss also direkt mit dem PHP-Code beginnen.

Eine mögliche Fehlerquelle ist, dass sich irgendwo ein Leerzeichen oder ein Zeilenumbruch eingeschlichen hat, zum Beispiel wenn du mit dem <?php erst in der zweiten Zeile beginnst. Dann wird der Zeilenumbruch davor als "Zeichen" ausgegeben und session_start() funktioniert nicht mehr.

Ein anderes Problem, auf das man nur schwer kommt, ist die Kodierung der Datei. Wenn deine Datei die Kodierung UTF-8 hat, kann es sein, dass am Anfang deiner Datei eine Byte Order Mark (BOM) steht. Diese sagt dem ausführenden Programm, dass es sich um eine UTF-8 Datei handelt, die BOM wird aber nicht in einem Editor angezeigt. Dadurch wird die BOM  unbemerkt gesendet und als erste Zeichen der Datei interpretiert und das session_start() funktioniert nicht mehr, du bekommst aber natürlich nichts davon mit.

Die Lösung ist einfach: Da in UTF-8 Dateien die BOM optional ist, muss man sie entfernen und alles funktioniert wieder. Du kannst die BOM aus der Datei zum Beispiel mit dem TextKonverter entfernen, in dem du einfach die Kodierung über "Datei > Nur Kodierung der Datei ändern" änderst. Hier wählst du einfach "Unicode UTF-8" als Kodierung und deaktivierst die Option "Byte Order Mark".

Wenn du deine Dateien, die keine BOM haben mit dem Editor von Windows bearbeitest und abspeicherst, kann es sein dass der Editor automatisch eine BOM zu den Dateien hinzufügt und es danach nicht mehr funktioniert. In Programmen wie Dreamweaver ist das nicht der Fall und alles bleibt beim alten.

Der Hintergrund, wieso es nicht funktioniert ist folgender: Sobald das erste Zeichen einer Seite gesendet wird, wird auch der Header gesendet. Und sobald der Header gesendet ist, kann keine Session mehr gestartet werden.
12.01.2012 um 16:02

AntwortenPositiv Negativ
11 Stimme

Vielen Dank! Genau das war das Problem. Ich habe die Byte Order Mark entfernt und es funktioniert wieder alles.

Ich hatte die Dateien wirklich kurz im Windows Editor angesehen und gespeichert, aber nichts großes geändert. Und schon was die BOM drin.. Tja, so schnell kann es gehen..
14.01.2012 um 14:41

Positiv Negativ
Antworten
Antworten

Ähnliche Themen

Kirmes Termine NRW 2014

Info | 0 Kommentare

PHP: Datei Download Skript

Tutorial | 0 Kommentare

Wichtiger Hinweis

Bitte beachten Sie: Die Beiträge auf askingbox.de sind Beiträge von Nutzern und sollen keine professionelle Beratung ersetzen. Sie werden nicht von Unabhängigen geprüft und spiegeln nicht zwingend die Meinung von askingbox.de wieder. Mehr erfahren.

Jetzt mitmachen

Stellen Sie Ihre eigene Frage oder schreiben Sie Ihren eigenen Artikel auf askingbox.de. So gehts.