Mittwoch, 6. September 2006

Problem mit PHP - Warning: Cannot add header information - headers already sent

Auf das Problem mit PHP headers already sent trifft man früher oder später. Doch was verbrigt sich hinter diesem Fehler und was kann man gegen ihn machen?

Problem: Headers already sent

Durch Umstellungen der PHP-Version, des error_reporting oder auch nur durch eigenes Verschulden beim programmieren von PHP-Scripten kann es plötzlich zu der Meldung: "Can not add header information - headers already sent" kommen.

Grund der Fehlermeldung

Die Fehlermeldung tritt auf, wenn man versucht nach einer Ausgabe durch echo, print, print_r und ähnlichen PHP-Funktionen, die PHP-Funktion header aufzurufen.

Warum passiert das aber? Weil durch das HTTP-Protokoll bestimmend, zuerst der HTTP-Header gesendet wird und dann der Content. Wenn man aber nun eine Ausgabe produziert, so ist diese der HTTP-Content. Logischerweise kann man danach nicht mehr einen HTTP-Header senden - was ja aber mit der Funktion header() erreicht werden soll.

Beachte

Achtung: Einer der häufigsten Gründe für die Fehlermeldung: "headers already sent" sindt meist ein oder mehrere Leerzeichen/Tabs vor den PHP Tags .

Lösung

Neben dem schnöden Auffinden der produzierenden Zeile durch die Fehlermeldung, gibt es zwei mir bekannte Herangehensweisen, um das Problem zu lösen.

Zum einen kann man vorher mit headers_sent() prüfen, ob schon ein HTTP-Header gesendet wurde. Die Funktion gibt einen Wahrheitswert (boolean) zurück, somit kann man mit einer vorgestellten if-Bedingung auf gesendeten Header prüfen und dementsprechend reagieren.

Die andere Möglichkeit ist, den PHP-Code mit der Art wie in Listing 1 gezeigt einzurahmen.



Listing 1

Download Code!

  1.  
  2. ob_start(); // Starten den Ausgabepuffer
  3. ob_start(); // Nochmal um einen Rahmen zu bilden
  4. // Supertoller PHP-Code
  5. // Noch mehr supertoller PHP-Code
  6. ob_end_flush(); // Wir schließen den Rahmen
  7. $output = ob_get_contents(); // Daten aus dem Ausgabepuffer holen
  8. ob_end_clean(); // Deaktivierung des Ausgabepuffers
  9. echo $output; // Ausgabe
  10.  

Wichtige Anmerkung zur Lösung mit dem Ausgabepuffer

Was hat das mit dem Rahmen auf sich? Ganz einfach. PHP nutzt für Sessions standardmäßig eine Funktion um an die URLs eine Session-ID anzuhängen, falls PHP kein Cookie setzen kann. Wird das ohne Rahmen gemacht, funktioniert das automatische Anhängen der Session-ID nicht mehr.

Bewertung: keine, 0 Stimme(n) 4885 Klicks
Probleme und Lösungen
Von Mr.Foo in Probleme und Lösungen am 06.09.06@12:25 Uhr

Trackbacks
Trackback für spezifische URI dieses Eintrags

Keine Trackbacks

0 Kommentare
Ansicht der Kommentare: (Linear | Verschachtelt)

Noch keine Kommentare


Kommentar schreiben

Umschließende Sterne heben ein Wort hervor (*wort*), per _wort_ kann ein Wort unterstrichen werden.
Standard-Text Smilies wie :-) und ;-) werden zu Bildern konvertiert.
Die angegebene E-Mail-Adresse wird nicht dargestellt, sondern nur für eventuelle Benachrichtigungen verwendet.
Sie können [geshi lang=LANG][/lang] Tags verwenden um Quellcode abhängig von der gewählten Programmiersprache einzubinden
 
 

Mr. Foo

Problem mit PHP - Warning: Cannot add header information - headers already sent

  • Homepage

Suche

Kategorien

  • Android (2)
  • C-Sharp (4)
  • Datenbank (30)
  • Delphi (2)
  • Entwicklung (36)
  • Flash (5)
  • Games (10)
  • Gutscheine (4)
  • Hardware (14)
  • HTML CSS (16)
  • Internet (88)
  • Java (32)
  • Javascript (24)
  • Linkdump (9)
  • Linux (102)
  • Low-Level (10)
  • Lua (8)
  • Musik (9)
  • Netzwerk (25)
  • New World Order (109)
  • Perl (3)
  • PHP (130)
  • Magento (5)
  • Symfony (3)
  • Zend Framework (7)
  • Probleme und Lösungen (26)
  • Python (22)
  • Ressourcen (23)
  • Sicherheit (91)
  • Software (60)
  • Sonstiges (47)
  • Own Stuff (48)
  • Spass (46)
  • Technik / Wissenschaft (4)
  • Tips (15)
  • Weisheiten (17)
  • Windows (23)
  • Wort des Tages (15)


Alle Kategorien

Archive

  • Mai 2012
  • April 2012
  • März 2012
  • Das Neueste ...
  • Älteres ...

Abonnieren lohnt sich!

  • XML RSS 2.0 feed
  • ATOM/XML ATOM 1.0 feed
  • XML RSS 2.0 Kommentare

Tagcloud

Datenbank Entwicklung Internet Java Javascript Linux Lösung Netzwerk News New World Order PHP Problem Probleme und Lösungen Sicherheit Software Sonstiges Spass Tipp Update Windows

Beliebte Einträge

  • Magento ist scheisse (197)
  • Plugin-container.exe deaktivieren (107)
  • BWin Betrug und Abzocke bei Minigames? (65)
  • C compiler cannot create executables unter Debian (53)
  • Scheiss Linux - USB-Platte viel zu langsam (wenns mal funktioniert) (43)
  • Sicheres Kontaktformular mit PHP - Spam verhindern (37)
  • UML-Diagramme aus Java-Klassen generieren – Java2UML (28)
  • Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden (28)
  • Option Bug im Internet Explorer bei Nutzung von innerHTML und Javascript (24)
  • Zend Studio - Javaw.exe lastet die CPU aus (24)

Kommentare

Hugo zu BWin Betrug und Abzocke bei Minigames?
So, 20.05.2012 12:25
ich habe mich gestern auf BWIN reg [...]
Ubuntu 12.04 zu The assembly mscorlib.dll was not found or could not be loaded.
Fr, 18.05.2012 17:11
Hat bei mir leider nicht geklappt. [...]
Oliver Riske zu Es konnte keine TCP/IP-Verbindung mit dem Host hergestellt werden
Di, 15.05.2012 20:38
Super Danke!
anon zu BWin Betrug und Abzocke bei Minigames?
Sa, 05.05.2012 18:43
ihr scheiss betrüger
Jürgen zu Unable to elevate error:1814 VLC Problem
Mi, 02.05.2012 16:54
So einfach ist es bei mir jedenfal [...]
 

Kontakt/Informationen