PHP rocks! wünscht allen Mitgliedern einen guten Rutsch ins neue Jahr 2017 !!!
Hinweis: Das Forum zieht um! Um keine Datenverluste zu haben, schalten wir zwecks Übernahme der Daten das Forum am Sonntag, den 24.04.2016 um ca. 21:00 Uhr offline und passen anschliessend die DNS-Einträge an.
www.php-rocks.de wird euch dann nach den Aktualisierungen der DNS-Server wieder wie gewohnt uneingeschränkt zur Verfügung stehen.
Danke für euer Verständnis!

Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Warnungen Cannot add/modify header information - headers already sent
#1

Warning: Cannot add/modify header information - headers already sent


Ein Klassiker unter den unverhofften PHP-Warnungen.

Was ist passiert?
Diese Warnung tritt i.d.R. auf, wenn versucht wird, den HTTP-Header zu modifizieren, nachdem bereits Dokumenten bezogene Inhalte an den Browser gesendet wurden.
Oft fällt einem dies im ersten Moment gar nicht mal auf, denn die Ursache für die Warnung ist vielfältiger, als manch einer denkt.

Um das prinzipiell verständlich zu machen, stellen wir das Problem auf einfachste Weise mal nach:
PHP-Code:
.<?php
header 
'Content-Type: text/html; Charset=utf-8;' ); 
Der Punkt vor dem <?php soll hier mal ein einfaches Leerzeichen darstellen ( gibt der Editor leider bzw. Gott sei dank nicht her, daher als Beispiel der Punkt ), also für einen unerfahrenen User kaum als wirkliche Ausgabe zu erkennen.
Dennoch ist dies eine Zeichen bereits eine Ausgabe, die an den Browser gesendet wird. Und genau dies kann der folgenden Funktion header(...); zum Verhängnis werden, denn die kann den HTTP-Header nicht mehr verändern, da die Ausgabe bereits einen eigenen HTTP-Header gesendet hat.

Das Problem tritt also tatsächlich nicht nur bei der Verwendung von header() auf, sondern bei allen Funktionen, die den HTTP-Header modifizieren.
Folgende häufig verwendete PHP-Funktionen zählen u.a. zu diesen:
  • header()
  • session_start()
  • session_regenerate_id()
  • setcookie()
  • setrawcookie()
Jetzt wissen wir, wo das Problem liegt und entfernen mühsam alle Ausgaben, die sich vor diesen Funktionen eingeschlichen haben.
Doch PHP bleibt beharrlich und meldet weiterhin dieselbe Warnung?! Der Grund dafür ist mit hoher Wahrscheinlichkeit dann...

Die Unicode-Falle
Die Verwendung von Unicode - allen voran UTF8 - ist heutzutage Quasi-Standard, wenn es bspw. um CharsetEncoding von Webprojekten geht.
Viele Editoren oder IDE's speichern die Daten im UTF8-Modus. Genau hier muß man aber aufpassen, daß man nicht nur UTF8, sondern UTF8 ohne BOM ( ByteOrderMark ) verwendet!

Das ByteOrderMark ist eine Kennung für die Unicode-Kodierung, die den Datenstrom einleitet und im Falle von UTF8 aus der Bytesequenz EF BB BF besteht.
Das wird in Browsern häufig als  interpretiert und ausgegeben ( im Quelltext des Browsers erkennbar ).

Daher Dateien immer UTF8 ohne BOM speichern!

Hinweis
Output Buffering kann das hier beschriebene Problem zwar in manchen Fällen umgehen, behebt dieses aber nicht! Eine saubere Programmierung ist immer die beste Fehlerbehandlung.


Gehe zu: