PHP-Header

Ich versuche, in einem PHP-Skript vor der Ausgabe die HTTP-Header zu verändern. Obwohl diese Anweisung ganz am Anfang kommt, gibt mir der Server eine Fehlermeldung aus. Was habe ich übersehen?

vorlesen Druckansicht
Lesezeit: 1 Min.
Von
  • Herbert Braun

Ich versuche, in einem PHP-Skript vor der Ausgabe die HTTP-Header zu verändern. Obwohl diese Anweisung ganz am Anfang kommt, gibt mir der Server eine Fehlermeldung aus. Was habe ich übersehen?

PHP kennt den Befehl header(), mit dem Sie HTTP-Zeilen von Hand setzen können, zum Beispiel header("Content-type: text/plain"). Das funktioniert jedoch nur, wenn nicht bereits die Ausgabe der Inhalte begonnen hat. Jede echo-Anweisung oberhalb von header() und jedes Zeichen Text vor Beginn des Codes verursachen die Warnung „Cannot modify header information – headers already sent“.

Selbst wenn die header()-Anweisung zu Beginn des Codes steht, kann sie Fehlermeldungen auslösen: Einige Textformate setzen nämlich an den Code-Anfang ein „Byte Order Mark“ (BOM). So weist das Drei-Byte-Zeichen EF BB BF zu Beginn eines Dokuments die Zeichenkodierung explizit als UTF-8 aus. Manche Editoren kennzeichnen UTF-8 mit BOM als „UTF-8Y“; in der Textansicht ist dieses optionale Zeichen unsichtbar.

PHP erkennt das BOM jedoch nicht und hält es für ein gewöhnliches Zeichen. Der Parser gibt es aus, sodass die header()-Anweisung nicht mehr funktioniert. Die Speicherung des PHP-Dokuments im UTF-8-Format ohne BOM behebt das Problem. (heb)