PHP: So lösen Sie das Problem “headers already sent”

Mit der Funktion header() kann man von PHP-Skripts aus nette Dinge anstellen, wie etwa den Typ des Dokuments festlegen

header(“Content-type: xxx”)

oder eine sofortige Umleitung zu einer anderen Seite auslösen

header(“Location: xxx”)

Statt der erhofften Wirkung erhält man manchmal aber auch nur die Fehlermeldung

Warning: Cannot add header information – headers already sent in ….

Der Grund dafür ist, dass PHP nur solange Header-Informationen schicken kann, wie noch keine Seiteninhalte an den Browser gesendet wurden. Ein typischer Fehler ist ein übersehenes Leerzeichen außerhalb der PHP-Tags, wie in

 <?php
header(“Content-type: …”;

Hier fällt das Leerzeichen vor der spitzen Klammer in Zeile 1 kaum auf, macht aber doch die Header-Ausgabe unmöglich.

Wichtig: In der Fehlermeldung gibt Ihnen PHP den Hinweis in welcher Datei und Zeile die Ausgabe erfolgt ist, die zu dem Problem führt. Dort sollten Sie also nachforschen, ob sich Leerzeichen eingeschmuggelt haben.

Da zur Speicherung von Daten über den Cookie-Mechanismus genauso header()-Befehle verwendet werden, kann der PHP-Fehler auch beim Aufruf der Funktion setcookie() erscheinen.

Kodierungsvariante als Fehlerursache

Haben Sie aber penibel alle Ausgaben vor der Funktion header() eliminiert und die Fehlermeldung tritt trotzdem auf, kann der Grund auch sein, dass die Skript-Datei versehentlich im Unicode-Format abgespeichert wurde. Denn hierbei schreiben manche Editoren vor dem ersten “echten” Zeichen automatisch als Kennung die Bytefolge “FF FE”, die PHP als Ausgabe interpretiert und deshalb die Warnung produziert.

Um sicherzugehen, dass ihr Programm nicht im Unicode-Format abgespeichert wurde, prüfen Sie in Ihrem Editor den Typ des Dokuments oder schalten in die Hex-Ansicht um. Dabei ist das Unicode-Format leicht an den beiden Startbytes und der Aufteilung jedes Zeichens auf zwei Bytes zu erkennen.

Ultraedit zeigt Unicode

 

Ähnliche Beiträge