zisslaweng.de

 Home    CSS    PHP    HTML    JavaScript    Allgemein    Sitemap   exemption-filter

Fehlermeldung

Warning: Cannot modify header information - headers already sent by (output started at /home/wshbg/WWW/ZISSLAWENG_2/index.php5:58) in /home/wshbg/WWW/ZISSLAWENG_2/index.php5 on line 66

Erläuterungen

Die Session Funktionen, sowie die Funktionen setcookie() oder header() fügen Header zum Datenstrom der Ausgabe hinzu bzw. ergänzen sie. Das Protokoll heisst HTTP und ist sozusagen das Vehikel, um Ihren HTML-Code zu übertragen. Header können nur vor allem weiteren Inhalt gesendet werden.

Da stellt sich die Frage, was genau ist der Header? Er ist der Beginn des Datenstroms, der vom Webserver an den Client gesendet wird und gegebenenfalls durch PHP modifiziert wird. Hier sehen Sie einen Header und erkennen, dass PHP hier eingegriffen hat, will nämlich beim Client ein Cookie setzen.

HTTP/1.1 200 OK
Date: Sun, 30 Mar 2008 09:21:47 GMT
Server: Apache/1.3.34 Ben-SSL/1.55
Cache-Control: no-store, no-cache, must-revalidate, 
     post-check=0, pre-check=0
Expires: Thu, 19 Nov 1981 08:52:00 GMT
Pragma: no-cache
X-Powered-By: PHP/5.2.5
Set-Cookie: ZISSLAWENG=5532e9dc1828ff0f668250c529c35363; path=/
Connection: close
Content-Type: text/html

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
    "http://www.w3.org/TR/html4/loose.dtd">
<html>.........

Bis <!DOCTYPE.. hat das also nichts mit Ihrem HTML Code zu tun. PHP muss beim parsen erkennen können, ob weitere Header Informationen eingefügt werden müssen. Falls nicht, wird der Header abgeschickt, dann kommt HTML (oder was PHP dafür hält.)

Ein Irrtum:
setcookie() oder session_start() müssen unbedingt als erste Funktion aufgerufen werden. Falsch, es spielt absolut keine Rolle, wo in Ihrem Skript der Funktionsaufruf platziert ist. Entscheidend ist, dass die Logik stimmt, dass Ihr Code durch PHP sauber interpretiert werden kann.

Abhilfe

Dateiname und Zeilennummer in der Fehlermeldung geben einen recht genauen Hinweis. In 90% der Fälle sind es sogenannte Whitespaces (leere Zeilen, Tabulatoren, Leerzeichen), die übersehen wurden, die ungewollt in einer include-Datei vor "<?php" oder hinter "?>" den PHP Tags liegen und die PHP dann veranlassen, die Header zu senden und dann anschließend diese nutzlosen Zeichen... aber eben ohne den von Ihnen definierten Header, der jetzt nicht mehr gesendet werden kann und so die Fehlermeldung auslöst.

Eine weitere Möglichkeit für den Fehler: Sie haben Ihr Skript versehentlich im Unicode-Format gespeichert. Die Unicode-Datei enthält vor dem ersten "echten" Zeichen die Bytefolge "FF FE", die PHP als Ausgabe interpretiert und deshalb die Warnung produziert. Sie können das mit einem Hex-Editor leicht prüfen.

Es gibt die Funktion headers_sent() um zu prüfen, ob die Header bereits gesendet wurden. Besser Sie kommen ohne aus.

 Im Web gibt es Hilfe. Googeln Sie nach "HTTP Header Test" oder nutzen Sie z.B. web-sniffer.net um sich die Request und Response Header anzeigen zu lassen.

Logo