PHP-Fehler - Cannot modify header information - headers already sent
“Cannot modify header information - headers already sent” ist einer der bekanntesten PHP Fehlermeldungen und sicher schon einigen Programmieren auf dem Bildschirm erschienen ist. Der PHP Fehler kommt durch Veränderungen bzw. Modifizierung des Header´s.
Hier muss man aber drauf achten, dass vor dem Senden des Header´s keine Ausgabe stattfindet (Leerzeichen oder ähnliches). Sollte sich doch ein Leerzeichen oder eine andere Ausgabe eingeschlichen haben, kommt es zu folgender Fehlermeldung:
Warning: Cannot modify header information - headers already sent by (output started at test.php:1) in tester.php on Line 999
Mögliche Header-Befehle:
- header(); -> Weiterleitungen, Cache u.s.w.
- session_start(); -> Session starten
- setcookie(); -> Cookies setzen
Hier mal ein paar Beispiele für den falschen Einsatz des PHP-Header´s:
1. Leerzeichen
_<?php header(”location:http://www.testdomain.de”); ?>
2. Ausgabe vor Header
<?php
echo “test”;
header(”location:http://www.testdomain.de”);
?>
Um die Fehlermeldung “Cannot modify header information - headers already sent” zu vermeiden, muss man also drauf achten, vorher absolut keine Ausgabe zu erzeugen.
Es gibt aber einen kleinen Trick, um zum Beispiel eine PHP-Header-Weiterleitung auch nach einer Ausgabe aufzurufen. Dies geht mit den PHP-Funktion ob_start und ob_end_flush. Durch die Funktionen wird der Ausgabepuffer aktiviert und die Ausgabe in einen internen Puffer zwischengespeichert. Nur Headerinformationen werden sofort ausgeführt. Folgend mal ein einfaches Beispiel:
<?php
ob_start(); //Startet Ausgabepuffer
echo “TextlalaText”;
if($bala==1) {
header(”location:http://www.testdomain.de”);
}
ob_end_flush(); //Beendet Ausgabepuffer und Ausgabe des Inhaltes
?>
Zusammenfassung:
Wer den PHP-Fehler “Cannot modify header information” gerne vermeiden möchte, sollte keine Leerzeichen, Texte oder anderen HTML-Code vor dem Header setzen. Umgehen kann man den Fehler wie schon erwähnt mit dem Ausgabepuffer ob_start() und ob_end_flush(). Kleiner Tipp schon Schluss, auch PHP-Fehlermeldungen sind Ausgaben und können zu dem Fehler führen.
Informationen zum Blogartikel "PHP-Fehler - Cannot modify header information - headers already sent"
- veröffentlicht am Freitag, 11. Juli 2008 um 21:12.
- Tags: cannot modify header information, Headerinformationen, ob_end_flush, ob_start, php fehlermeldung, php header, PHP-Fehler, PHP-Funktion, Weiterleitungen
- Blog-Kategorie: Fehlermeldungen, Programmierung
- Weiteres: RSS 2.0 | Antwort hinterlassen | Trackback










04. April 2009 um 13:25
Genial, hat mir sehr geholfen. Danke!
06. Juni 2009 um 21:56
Hallo,
Danke für die Anleitung.
leider klappt das bei mir nicht, weil ich in einer weiteren Unterroutine nochmals mit ob_start arbeite.
04. August 2009 um 12:30
Kopf ändern nicht erlaubt…
So die nette Übersetzung eines Fehlers, den ich eben in einem PHP Skript suchen musste. Ich wusste ja nicht wie pinkelig PHP an einigen Stelle ist - ja es ist nachvollziehbar, wenn man sich mit dem Fehler auseinandersetzt, aber er……
02. November 2009 um 14:11
[...] auch einen Fortschritt angeben - dazu habe ich mal das Beispiel (ziemlich weit unten) von dieser Seite genommen und daraus folgendes Testscript [...]
30. Dezember 2009 um 01:17
Warning: Cannot modify header information - headers already sent by (output started at /home/www/web964/html/poliwash-portal/index.php:1) in /home/www/web964/html/poliwash-portal/global.php on line 21
Habe die Datei Global.php nachgeschaut, klein Leerzeichen. ich habe selbst nichts verändert sondern nur eine webseite freigegeben und dann kam dieses problem. kann mich auch nicht mehr einloggen dann erscheinen weitere Probleme
habe keine Ahnung von php habe auch schon hier gelesen leider habe ich keinen passenden Fehler gefunden. Wer kann bitte so nett sein und einen Laien sagen wo der fehler liegt. Ich bedanke mich vorab rechtherzlich
24. August 2010 um 16:36
Also ich habe alles ausprobiert. sogar neue datei gemacht. habe keinerlei leerzeichen oder noch wat.
die loesung war:
ich habe die textdatei als:
UTF-8
gespeichert.
und nicht als ANSI
als ich es als ANSI gespeichert habe, war das problem geloest.
SCHADE dass ich das nirgendwo gefunden hab.
ADMIN fuege das bitte auch hinzu!