Welche Einstellung beeinflusst "headers already sent"?
snorri
- php
Hi alle,
wohl jeder, der sich ein bisschen mit PHP beschäftigt, stolpert irgendwann über diese Meldung "Warning: Cannot modify header information - headers already sent ...", wenn man versehentlich etwas ausgibt und dann header() verwendet.
Was mich gerade wundert: Ich habe so einen Bug produziert, der aber auf meinem Testserver zu keiner Warnmeldung führt (und auch die Umleitung per header() funktioniert), wohl aber online. Gibt es eine PHP-Einstellung, die festlegt, ob das geprüft wird?
(Mein error_reporting am Testserver steht auf "E_ALL & ~E_NOTICE", sollte die Warning also eigentlich ausgeben. PHP ist Version 5.2.6.)
Danke im Voraus!
-- snorri
Hallo,
wohl jeder, der sich ein bisschen mit PHP beschäftigt, stolpert irgendwann über diese Meldung "Warning: Cannot modify header information - headers already sent ...", wenn man versehentlich etwas ausgibt und dann header() verwendet.
nicht unbedingt - die Header vor dem Nutzinhalt zu senden, sollte eigentlich selbstverständlich sein.
Gibt es eine PHP-Einstellung, die festlegt, ob das geprüft wird?
Nein. Aber bei dir könnte Output Buffering aktiv sein - also dass PHP erst alle Nutzinhalte zwischenspeichert und erst am Scriptende wirklich ausgibt. Dann kann man auch jederzeit im Script noch Header in die Warteschlange stellen.
(Mein error_reporting am Testserver steht auf "E_ALL & ~E_NOTICE"
Da sollte es aber eigentlich auf E_ALL stehen (E_NOTICE eingeschlossen).
So long,
Martin
Hello,
... und außerdem kann er im Script, bevor (weitere) Header eingetragen werden in die interne Tabelle, auch die Funktion headers_sent()
[http://de3.php.net/manual/en/function.headers-sent.php]
abfragen, die den Sendestatus kennt.
Wenn die true liefert, ist es schon zu spät.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
Hallo Tom,
... und außerdem kann er im Script, bevor (weitere) Header eingetragen werden in die interne Tabelle, auch die Funktion headers_sent() abfragen, die den Sendestatus kennt.
danke, das wusste ich auch noch nicht. Vielleicht kann man das ja wirklich mal gebrauchen ...
Schönes Wochenende,
Martin
Hallo Tom,
Nützlicher Tipp, auch von mir ein Danke!
-- snorri
Hallo Martin!
bei dir könnte Output Buffering aktiv sein
Hab grad mal nachgeschaut, da steht in der php.ini: "output_buffering = 4096". Wenn ich das auf "0" setze oder auskommentiere ändert sich am Verhalten allerdings nichts.
(Mein error_reporting am Testserver steht auf "E_ALL & ~E_NOTICE"
Da sollte es aber eigentlich auf E_ALL stehen (E_NOTICE eingeschlossen).
Gute Idee.
-- snorri
Hallo,
bei dir könnte Output Buffering aktiv sein
Hab grad mal nachgeschaut, da steht in der php.ini: "output_buffering = 4096". Wenn ich das auf "0" setze oder auskommentiere ändert sich am Verhalten allerdings nichts.
Du musst Output Buffering explizit starten, dazu dient ob_start().
Freundliche Grüße
Vinzenz
Hi,
bei dir könnte Output Buffering aktiv sein
Hab grad mal nachgeschaut, da steht in der php.ini: "output_buffering = 4096". Wenn ich das auf "0" setze oder auskommentiere ändert sich am Verhalten allerdings nichts.
Du musst Output Buffering explizit starten, dazu dient ob_start().
wäre nicht die viel spannendere Frage, wie er das Output Buffering auf seinem Testsystem *aus*schaltet? So wie ich den OP verstanden habe, tritt die Meldung auf seinem Produktivserver auf, aber nicht auf seinem Testsystem, und er versucht nun, die Konfiguration auf seinem Testserver anzugleichen.
Mir ist aber keine PHP-Einstellung bekannt, die Output Buffering einfach so aktiviert, ohne dass man das explizit mit ob_start() initiiert.
So long,
Martin
hi,
Mir ist aber keine PHP-Einstellung bekannt, die Output Buffering einfach so aktiviert, ohne dass man das explizit mit ob_start() initiiert.
Zählt da auch die php.ini konfiguration?
Ich habe in meinen ini-Dateien stets ein
output_buffering = ON
zlib.output_compression = ON
und hatte seit der verwendung dieser Einstellungen nie Probleme mit headern.
P.s.: Unter Windows-Xampp und PHP als CGI muss man den Server neu starten, damit diese Einstellungen übernommen werden.
mfg
Hello,
[...]
da spielen die Einstellungen 'implicit_flush' und 'output_buffering' mit...
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg