Hauptmenü

Untermenü

PHP/MySQL - Header - "Cannot modify ..."

1. Die Abschnitte

2. GANZ WICHTIG!

Im Gegensatz zum <meta http-equiv>-Tag von (X)HTML gibt es bei PHP-Headern eine Besonderheit. Es darf vorher keinerlei Ausgabe an den Browser gesendet werden. Denn sonst haut es euch eine Fehlermeldung à la Warning: Cannot modify header information - headers already sent by ... um die Ohren.

3. Ausgaben

... sind alle "Daten", die erzeugt werden, bevor man einen Header per PHP absetzt. Der Einfachheit halber arbeite ich hier teilweise mit Zeilenangaben (so wie früher in BASIC).

Beliebte Fehler


1:
2:<?php
3:  header ("Location: http://www.example.com");
4:?>

In diesem Beispiel erzeugen wir zu Beginn einen Zeilenumbruch, der bereits eine Ausgabe ist. Korrekt sollte der Code dann so aussehen:


1:<?php
2:  header ("Location: http://www.example.com");
3:?>

Ein weiterer beliebter Fehler ist ein Leerzeichen am Anfang. Schaut mal genau hin, dann seht ihr ihn.


1: <?php
2:  header ("Location: http://www.example.com");
3:?>

Völliger Tinnef

... ist natürlich folgendes Beispiel, da hier schon drei(!) Ausgaben erzeugt werden:


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<?
   header ("Location: http://www.example.com");
?>
...
</head>

Schaut euch dazu mal die Datei modify.php im Ordner cannot_modify des Beispielcodes an. Da gibt es einen einfachen Code, der wegen des obigen Problems nicht ausgeführt wird.

Ein wichtiger Hinweis!!!

Wer zum Beispiel den aktuellen XAMPP benutzt, der wird sich wundern, warum das Beispiel trotzdem funktioniert. Das hat etwas mit der Ausgabenpufferung zu tun. Das ist eine Einstellung in der php.ini namens output_buffering. Normalerweise ist diese Angabe auskommentiert. Aber offenbar war man bei den Apache-Friends wohl der Meinung, dass man den Dödeln bei schlampigem Code unter die Arme greifen sollte. Denn ein paar Zeilen nach der auskommentierten Angabe steht dann da ein output_buffering = 4096. So, und als Allererstes entfernt ihr bitte diesen Eintrag und startet den Apache neu. Denn das hier ist definitiv nicht der Normalfall, sondern eine Ausnahme, auf die man sich nie verlassen sollte.

4. BOM

Dies ist auch ein sehr häufig auftretender Fehler. Dabei wird, wie schon gesagt, ein BOM gesetzt. Meist geschieht dies aus Versehen und wird auch von vielen Editoren bei der Standardeinstellung nicht dargestellt. In vielen Fällen geschieht das in diversen Editoren, wenn man als Zeichenkodierung UTF-8 gewählt hat. Das könnte dann in etwa so aussehen, wobei das BOM nicht dargestellt wird.


1:BOM<?php
2:  header ("Location: http://www.example.com");
3:?>

In dem Fall muss man in seinem Editor nachschauen, wo man das BOM anzeigen und dann entfernen kann. Oder man sucht man einer Möglichkeit, die Datei in ein Format ohne BOM zu konvertieren. Die ganz Harten unter euch können auch mit einem Hex-Editor arbeiten und den Übeltäter anhand der Bytefolge (siehe Link zu BOM) eliminieren. Zum Testen gibt es die Datei bom.php im bekannten Ordner cannot_modify

zurück zum vorherigen Abschnitt weiter zum nächsten Abschnitt