PHP Fehlermeldungen








Warning: Cannot modify header information - headers already sent by

 Startseite > PHP Fehler > Warning: Cannot modify header information - headers already sent by

Diese Meldung erscheint auch oft bei alten PHP Scripten die unter neuen PHP Versionen mit anderen Einstellung verwendet werden sollen.


Die Fehlermeldung
Warning: Cannot modify header information - headers already sent by (output started at E:php-fehlertest_code.php:5) in E:php-fehlertest_code.php on line 7

Die Warnung sagt, das php eine Headeranweisung via der Funktion header() nicht senden konnte, da bereits in der Zeile 5 eine Ausgabe erfolgte.

Der Code
Code:
  1.  
  2.  
  3. $string = 'Hallo';
  4.  
  5. echo $string;
  6.  
  7. header("Location: http://localhost/test_code.php");



Ursache: Ausgabe per echo vor der Funktion header


Weitere Beispiele
Code:
  1.  
  2.  
  3. <?php
  4. //Fehler, Leerzeichen von <?php
  5. $string = 'Hallo';
  6.  
  7.  
  8. header("Location: test_code.php");
  9.  
  10. ?>
  11.  


Hier ist vor dem <?php Start-Tag ein Leerzeichen, wenn der Start-Tag ganz nach oben verschoben wird, sollte der Fehler nicht mehr auftreten.


Code:
  1. <?php
  2. $wert = 5,
  3. ?>
  4. <div>Fehler</div>
  5. <?php
  6. $string = 'Hallo';
  7.  
  8.  
  9. header("Location: test_code.php");
  10.  
  11. ?>
  12.  


Hier wurde PHP kurz unterbrochen um HTML auszugeben, dadurch kann man die Header() Funktion hier nicht mehr nutzen.


Zur Problemlösung:
Es sollte bei der Verwendung der header() Funktion darauf geachtet werden das vor dem Aufruf dieser Funktion noch keine Daten vom Server zum Browser gesendet wurden.

Manchmal sind es schon kleine Flüchtigkeitsfehler die diese Fehlermeldung verursachen. Zum Beispiel ein Leerzeichen oder Zeilenumbruch vor dem <?php Start-Tag fühen bereits dazu, daß Daten an den Browser gesendet werden.

Bei einigen Webauftritten ist es aber auch der Aufbau bzw. die Struktur der Seite, die die Verwendung von der header() Funktion unmöglich macht. Manche Webauftritte haben ihre Dateien so verschachtelt mit include() das vor den eigentlichen PHP Code jedesmal schon HMTL gesendet wird.



 Kommentare

15.11.2007: fips

nicht böse gemeint,aber witzig ist das schon.hier werden genug beispiele gezeigt wie es falsch ist,aber leider bietet ihr keinen einzigen lösungsansatz.das ist echt schade.den fehler sind schneller gemacht als beseitigt und die meisten suchen nach lösungen.also falscher ansatz leute. ADMIN: Die Ursache die im Beitrag genannt wurde, sollte eigentlich selbsterklärend sein. Und den Leser damit verständlich machen was er ändern muss.

20.11.2007: ashyda

An sich fand ich das schon ein bisschen hilfreich, weil ich eben jenen Fehlercode habe und verstanden hab, was er für ein Problem hat. Allerdings wären ein paar mehr Beispiele ganz hilfreich gewesen, damit man sich den richtigen Lösungsweg über vlt mehrere Abschnitte selbst zusammen basteln kann. Denn mein header befindet sich in Zeile 280 und eine Ausgabe sei bereits in Zeile 2 erfolgt. Da steht aber nur <?php und sonst nichts. Außerdem hat es vorher immer funktioniert, ich wüsste nicht, wo da auf einmal der Fehler herkommen sollte.

04.12.2007: ADMIN

Der Fehler in Zeile 2 wird sein, das vor dem <?php ein Leerzeichen oder Zeilenumbruch ist. Manche Editors fügen automatisch beim Speichern Leerzeichen ein. Oft wenn man Funktionen wie Suchen/Ersetzen in mehreren Dateien verwendet. Es gibt halt mehrere Möglichkeiten.

27.12.2007: tobsi

vielen dank füt den beitrag!!! ich habe den fehler behoben und es läuft !!! -DAN_KE !!!

25.02.2008: Axel Albitz

zwei Zeilenumbrüche am Ende eine include-Datei (?>nn haben den gleichen Effekt - eine unsichtbaren output und die o.g. Fehlermeldung.

13.03.2008: Marcel Schweiz

Vielen lieben Dank für den Tip. Es war tatsächlich auch mein Problem. Ich hatte diese Fehlermedlung in OSTICKET. Beim Script admin.php waren nach dem ?> noch ein paar Leerzeilen welche diese Fehlermeldung produziert. bye

14.03.2008: Dark

Vielen Dank, Problem erfolgreich gelöst .

08.04.2008: Omicron

Auch von mir ein herzliches Dankeschön. Manchmal ist man wirklich betriebsblind und übersieht sogar ein Leerzeichen! Mann Mann Mann ...........

23.04.2008: Hoto

Sollte Jemand die Fehlermeldung in der aufzurufenden PHP Datei direkt in Zeile 1 bekommen: das passiert, wenn man die PHP Datei als UTF-8 speichern will. So ist es jedenfalls bei mir eben gewesen, statt UTF-8 in ANSI gespeichert und weg war der Fehler (nutze Notepad++).

10.05.2008: wowo

Erst mal schoenen Dank für die Lösung. Ich beherrsche einige Programmiersprachen. Aber dies ist eines der dämlichsten Probleme, die es gibt und nicht geben dürfte. warum wird so was überhaupt ind Form von GD implentiert. Na ja... Kann man isch wohl nur mit abfinden.

27.07.2008: akita

Vielen Dank für die Info! Lange Zeit funktionierte das PHP-Script (eine Umleitung) im Header, plötzlich kam der Fehler. Als ich es aus dem Header ganz an den Anfang stellte, lief alles wieder. @fips: MIR hat die Seite geholfen. Ein wenig Denkarbeit sollte bei der Lösungssuche schon noch übrig bleiben. ;-)

29.09.2008: PHPler

Hi, ich schließe mich da ashyda mal an. Das liegt einfach daran das die Leute die diese dinge hier eintragen es so formulieren wie sie es können aber nicht so das es anderen hilft. Ich kenne mich in sachen PHP gut aus, aber man kann nicht alles wissen und ich werde aus dieser angeblich (selbsterklärenden) lößung/hilfe nicht schlau drauß und konnte den Fehler nicht beheben. greez

21.10.2008: Verena

Erstmal danke für das Howto, hat mir sehr geholfen. Besonders der Kommentar von Hoto, denn das war es bei mir. Konnte nach stundelanger verzweifelter Suche kein falsch platziertes Leerzeichen finden, aber ich hatte die Datei zuvor mit Notepad++ in UTF-8 konvertiert - und das wars. Herzlichen Dank für diese Seite!

06.01.2009: othmar

Vielen Dank für diese exzellente Seite. Hat mir dabei geholfen mein Problem (Darstellen von Grafiken die in mySQL Blob's gespeichert sind) zu lösen. Mein Fehler war die PHP Datei, die über das IMG HTML Element geladen wird, und die die Grafik von der Datenbank lädt, mit Dreamweaver zu erstellen. Dabei generiert Dreamweaver standardmässig einen Header (dem ich nicht viel Bedeutung zumass) aber der eben auch einen Header enthält. Nach dem Löschen des Headers war das Problem gelöst.

09.01.2009: Roman

Einfache Lösung: PHP Datei in “UTF-8 ohne BOM” konvertieren!!! Am besten mit Notepad++. Format–> Konvertieren…

18.02.2009: Tarnfisch

VIELEN DANK HOTO !!!! Einfach in ANSI speichern und der Fehler ist weg !! Wahnsinn Vielen Dank !

19.02.2009: Micha

Othmar, wie hast du das header aus dreamweaver rausgewurfen? Bei mir funktioniert alles wenn ich den Code in Zeile 1 einfüge. Wenn ich aber ein body davor einfüge, wie einen Text, und dann die Grafil anzeigen will, kommt der Fehler. Hier mal der Code in verkürzter Form text <?php //Daten aus der MySQL-Tabelle auslesen $DatabasePointer = mysql_connect($DatabaseHost, $DatabaseUser, $DatabasePassword); mysql_select_db($Database, $DatabasePointer); $ResultPointer = mysql_query

09.04.2009: Andreas

Klasse, vielen Dank für den Tip hatte in etwa die selbe Fehlermeldung in meinem Webkatalog Script. Einfach super, hab nach Deiner Anleitung die Leerstellen entfernt und siehe da, es "funtzt" alles bestens. Vielen vielen Dank Schöne Grüße aus dem Harz Andreas

15.04.2009: Sagender

Also irgentwie fehlt auch was, weil ich hab nirgents eine HEader Funktion und Trotztdem diesen Fehler!

16.04.2009: Frank

Bei mir hat der output laut Fehlermeldung immer beim <?php tag angefangen. Ich hatte kein Leerzeichen oder Absatz davor bzw. dahinter. Die Lösung: Ich musste das php Script vor den <html> tag schreiben. Achso, bei mir kam der Fehler von setcookie().

08.05.2009: Simon

Es ist keine gute Idee, Ansi zu verwenden. Denn dort können nicht alle Zeichen dargestellt werden Benutzt einfach UTF8 OHNE byte order mark (bom)

13.06.2009: Edelsalami

Auch von mir ein herzlichen Dank für die Informationen. Es ist ja schon ein wenig merkwürdig, dass die lokale Installation (Win2k Server) funktioniert hat, aber der gleiche Code remote auf einer Linux Maschine nicht! Auch ich musste ein Zeilenumbruch (Leerzeile) und führende Leerzeichen entfernen damit es funktioniert hat.

03.07.2009: Jens

Schön verständlich erklärt. Angenehm zu lesen und auch noch lehrreich. Danke. Und danke an hoto von einem weiteren UTF-8 Problemkind. (ö,) An irgendwelchen Leerzeichen lag es bei mir nicht. Hab es irgendwann dann raus gefunden und leider erst danach hier die Lösung entdeckt... Man lernt halt nie aus.

13.10.2009: Kay

Habe alles kontrolliert, was ihr geschrieben habt und ich finde keinerlei fehler bei mir und dennoch habe ich die Fehlermeldung. An was könnte es noch liegen? Vielen Dank für eure Antwort :)

01.12.2009: Thomas

Vielen Dank, mir hat der Artikel bei der schnellen Lösung des Problems sehr geholfen. Gruss Thomas

28.02.2010: Ole

Ja, umschreiben der Datei auf “UTF-8 ohne BOM” per notepad++ tat es. Danke an Roman!

22.04.2010: avan

sehr hilfreich! vielen dank! ich habe beim rumprobieren ausversehen ein paar zeichen (die eigentlich über die such-funktion im skript suchen wollte) vor das <?php gesetzt, die dann den fehler hervorriefen. danke nochmal!

27.04.2010: Robby

@HOTO: auch vielen Dank von mir! Problem war auch bei mir ein UTF-8 eingestellter Editor. ->ANSI und alles ist wieder ok. Danke für den Tip, habe vorher zwei Tage in meinem Typo3-Script rumgewühlt...

05.05.2010: Suleiman

Danke für die Fehlerbeschreibung, habe es damit lösen können. Der Fehler war in der erste Zeile ;-) <?php vielen dank

26.06.2010: Votan

@HOTO oh DANKE, DANKE - ich war schon kurz vor einem Anfall... habe die ganze Website von meinem alten auf den neuen Server kopiert, die configs angepasst und dabei ist es wohl passiert - hab sie wohl im utf8-Code gespeichert - jetzt läuft wieder alles :-)

18.08.2010: Uwe

header("Location: ...) akzeptiert keinerlei HTML-Code vor dem Hearder-Befehl. Zwischenzeitliches Beenden von PHP vor header("Location:...) und auch Leerzeichen vor <?php lösen die Fehlermeldung aus. Echo und Print vor header("Location:...) werden nicht akzeptiert, weil man damit HTML-Code ausgeben kann. Man muß demzufolge alle echo und print und Leerzeichen vor dem ersten <?php entfernen oder hinter header("Location: ...) ausgeben lassen. Um dies zu erreichen, könnte man Text und HTML-Tags, die vor header stehen dort einer Variablen übergeben, um sie nach dem Header mit Echo auszugeben.

30.09.2010: Heiko Behrens

Danke, ein fälschlich eingefügtes Leerzeichen am Ende einer inkludierten Datei, war das Problem. Hätte ich nicht erwartet.

29.11.2010: HR

Einfach <?php ob_start();?> ganz an den Anfang und danach kann man HTML/PHP/Header beliebig mischen solange nicht ein noob nachträglich einen Doctype an den Beginn stellt

07.03.2011: Sam

Danke für diesen Beitrag, ich konnte das Problem beheben.


 Kommentar schreiben

 Ihr Name:
 
 Ihre Emailadresse (wird nicht angzeigt)
 
 Ihr Kommentar (maximal 500 Zeichen)
 

 Wenn Ihnen dieses Bild nicht angezeigt wird, ist wahrscheinlich die Bildanzeige im Browser deaktiviert.
   Sicherheitscode eingeben

 


andere Themen:
22.02.2005 Warning: Invalid argument supplied for foreach()
22.02.2005 Parse error: parse error, unexpected '='
22.02.2005 Notice: Undefined index
22.02.2005 Warning: session_start(): Cannot send session cookie - headers already sent by


Zurück


<?php echo 'Programmieren - Programme - Scripte - Informationen - PHP: Hypertext Preprocessor - Webprogrammierung'; ?>


© PHP-Fehlermeldungen
Beinspreizer