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!
30. Juni 2011 um 23:06
Danke, dass mit dem ob_flush hat mir sehr gut geholfen. So kann man nämlich auch zwischendurch schon Daten an den Browser schicken, auch wenn dass Script noch nicht zu Ende ist. Gut wenn man irgendwie eine Socket-Verbindung vom Server zu einem anderne Server herstellt, aber während der Übertragung schon Antworten im Browser sehen will.Chefsessel Milano
29. Oktober 2011 um 12:06
@hejla
Nach langen Versuchen hab ich das mit der Codierung noch versucht:
Das war tatsächlich der Fehler. Vielen Dank!!!