PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Cannot Modify Header Information


Jane
01.08.2006, 13:48:58
Hallo,
Ich habe eine kleine Homepage mit Adminbereich, Gästebuch und anderen kleinen selbstgemacht PHP Spielereien gebastelt. In meiner Entwicklungsumgebung auf meinem kleinen Homeserver mit Win2k3 Server, IIS6 hat auch alles toll funktioniert. Nun habe ich die Page in die Produktivumgebung geschaufelt, dort funktioniert auch alles bis auf eines: Das forewarding.

Beispiel Gästebuch. Die Formularangaben werden an eine PHP Datei gesendet die die Daten in die Datenbank schießt und dann wieder aufs Gästebuch zurückleitet.
Das geschieht ganz einfach mit:

"
header("Location: gbook.php");
exit;
"

Da bekomm ich aber nun den PHP-Fehler "Cannot modify Header information". Nun habe ich auch schon den ganzen vormittag gegoogelt und es wurde in zahlreichen Foren ja darauf aufmerksam gemacht das vorher keine Informationen an den Header geschickt werden dürfen. Das geschah bei der ein oder anderen Datei vielleicht, aber diese haben in der entwicklungsumgebung trotzdem funktioniert, des weiteren gibt es auch genug dateien die keine Infos an den Header senden bevor header() aufgerufen wird und der Fehler tritt trotzdem auf. Nun das beste, der Fehler tritt auch bei folgendem Code auf:
<?php header("Location: home.html");exit;?>

Es ist auch egal ob ich eine statische URL angebe, die dieses objekt angeblich verlangt. Es funktioniert auch nichts wenn ich folgendes mache:
echo "<meta http-equiv=refresh content=5; URL=http://www.google,de>";

Hier die phpinfo() falls die interessant ist:
http://janellers.de/info.php

gruß und schon mal vielen dank,
Jan

Opendix
01.08.2006, 16:47:35
du darfst header() nur benutzen wenn du vorher nichts(!!) geschrieben hast!

Also vor dem öffnenden php-tag darf nichtmal ein leerzeichen stehen!

alexwess
01.08.2006, 16:51:09
ich denke das meinte er mit...

<?php header("Location: home.html");exit;?>

alexwess
01.08.2006, 16:53:08
was steht den hinter

headers already sent by ?????


mfg

Jane
01.08.2006, 18:53:12
Ja das meinte ich damit und ja da steht "already sent by..." dahinter ;)

MatMel
01.08.2006, 18:58:30
Poste doch mal bitte die gesamte Fehlermeldung.

Wird die Datei die du bearbeitest irgenwie included, dass vorher noch was steht?

meikel (†)
02.08.2006, 00:41:55
Beispiel Gästebuch. Die Formularangaben werden an eine PHP Datei gesendet die die Daten in die Datenbank schießt und dann wieder aufs Gästebuch zurückleitet.
Das geschieht ganz einfach mit:
header("Location: gbook.php");
exit;
Da bekomm ich aber nun den PHP-Fehler "Cannot modify Header information".

1. Handbuch lesen:
http://de3.php.net/header

2. FAQ lesen:
28.13. Warning: Cannot add header information - headers already sent ...
http://www.php-faq.de/q/q-fehler-header.html

Nun habe ich auch schon den ganzen vormittag gegoogelt und es wurde in zahlreichen Foren ja darauf aufmerksam gemacht das vorher keine Informationen an den Header geschickt werden dürfen. Das geschah bei der ein oder anderen Datei vielleicht,
Dann korrigiere das.

aber diese haben in der entwicklungsumgebung trotzdem funktioniert,
Möglich, daß Deine Privatkiste die Ausgaben puffert, damit vor dem HTTP-Content der HTTP-Header rausgeblasen wird.

Zum Verständnis:
HTTP beginnt mit dem Header. Danach folgt der Content, also Dein HTML.
Die Regelung dabei ist: sobald eine Zeile gesendet wird, die kein Header ist, schaltet PHP bzw. der Apache auf Content um. Nachträgliche Headerzeilen verursachen deshalb einen Fehler.

Jane
02.08.2006, 11:41:29
Zitat:
Nun habe ich auch schon den ganzen vormittag gegoogelt und es wurde in zahlreichen Foren ja darauf aufmerksam gemacht das vorher keine Informationen an den Header geschickt werden dürfen. Das geschah bei der ein oder anderen Datei vielleicht,

Dann korrigiere das.

Satz zuende lesen, es geht auch bei denen nicht die keine Daten an den Header senden. Ich weiß ebenfalls was ein Header ist und bevor ich mich in nem Forum anmelde auf die gefahr hin noch mehr Spam zu bekommen Les ich auch Dokus und Handbücher ;)

Kann es sein das ich die php.ini anders konfigurieren muss? Da ich bei meiner Testumgebung viele einstellungen verändert habe...

Edit:
mit "ob_start()" und "ob_end_flush()" wird das Problem behoben, das verhindert das senden von Infos an den Header.

Opendix
02.08.2006, 11:49:01
Willst du damit sagen, dass der fehler... header already sent... auch kommt wenn du die funktion header() nicht benutzt?

hast du auch alle deine includes überprüft ob du nicht trotzdem irgendwo ein header() verwendest?

nun das mit den Buffern sehe ich nicht als Problem behoben sondern du hast eifnach das Problem umgangen...

xabbuh
02.08.2006, 12:30:58
Satz zuende lesen, es geht auch bei denen nicht die keine Daten an den Header senden.
Warum schaust du nicht einfach mal an der Stelle nach, an der laut Fehlermeldung die Ausgabe geschehen soll (die exakte Fehlermeldung verschweigst du uns bis jetzt ja immer noch).
Außerdem werden nicht nur von der PHP-Funktion header() HTTP-Header gesendet. Auch setcookie() oder session_start() senden entsprechende Header.

meikel (†)
02.08.2006, 16:09:44
Satz zuende lesen, es geht auch bei denen nicht die keine Daten an den Header senden.
a. Hab ich.
b. auch ein Leerzeichen oder eine kosmetische Leerzeile außerhalb der PHP Tags ist schon Content.

PHP teilt Dir das ja in der Fehlermeldung mit, wo ab welcher Zeile Dein Script Mist baut. Einfach mal darauf reagieren und nicht rumjammern.

Ich weiß ebenfalls was ein Header ist und bevor ich mich in nem Forum anmelde auf die gefahr hin noch mehr Spam zu bekommen Les ich auch Dokus und Handbücher ;)
Toll. Und warum hälst Du Dich nicht daran?

Kann es sein das ich die php.ini anders konfigurieren muss? Da ich bei meiner Testumgebung viele einstellungen verändert habe...
Nein. Dein Script sendet vor dem letzten Header schon Content.

Edit:
mit "ob_start()" und "ob_end_flush()" wird das Problem behoben, ...
Dein Problem ist Deine schlampige Programmierung.