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?
Ähnliche Themen
PHP Session Variablen (PHPSESSID) auch unter Subdomains verfügbar machen
Tipp | 0 Kommentare
Byte Order Mark aus sehr vielen Dateien entfernen
Frage | 1 Antwort
PHP: Prüfen ob Session bereits besteht - Fehlermeldung "A session had already been started" verhindern
Frage | 2 Antworten
Website Performance: Caching und Expires Header von Bildern, CSS und JavaScript
Tutorial | 0 Kommentare
Bilder, CSS, JS und Seiten neu laden trotz Browser-Cache
Tipp | 2 Kommentare
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.
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
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