Cannot modify header information - headers already sent

  • Författare
  • Meddelande
Användarvisningsbild

mos

dbwebb

  • Inlägg: 10921
  • Blev medlem: 10 nov 2011, 09:52
  • Ort: Ronneby / Bankeryd

Cannot modify header information - headers already sent

Inlägg23 jan 2015, 12:04

Ett vanligt felmeddelande, och ibland svårt att finna orsaken till, är följande:
Warning: Cannot modify header information - headers already sent by (output started at /home/saxon/teachers/tek/mos/www/test/1.php:2) in /home/saxon/teachers/tek/mos/www/test/2.php on line 4


Felmeddelandet innebär att output (till webbläsaren) har startat och därmed har HTTP headern skickats. Troligen försöker du göra någon funktion som påverkar header-informationen, tex genom att anropa funktionen header() eller påverka sessionen. Därav felmeddelandet, på ren svenska:
"Jag har redan skickat header-informationen, du kan inte påverka den."


För att felsöka så går man till raderna som anges och tittar om någon text kan ha skrivits ut.

Felmeddelandet kan innebära att man skrivit ut data till webbläsaren, innan man anropat funktionen header(). Den direkta orsaken är ofta tomma rader/mellanslag/tab före starttag (<?php) eller efter slut-tag (
?>).

Problemet kan också inträffa när man börjar använda sessioner. Även där är ofta den direkta orsaken att man skrivit ut något (echo) eller har tomma tecken/rader (mellanslag, tab, ny rad) innan man startat sessionen (session_start()). En bra förklaring på detta finns på följande inlägg:
http://stackoverflow.com/questions/2173 ... put-starte

Felet kan också bero på att man inkluderar filer som är sparade som UTF BOM. Spara dem som UTF8 no-BOM. UTF8 BOM innehåller ett par tecken i början av filen. Det gör inte UTF8 no-BOM
http://en.wikipedia.org/wiki/Byte_order_mark

Se till att ha filen source.php i katalogen så brukar det vara enklare att felsöka och leta. Senaste versionen av source.php finns på github:
http://dbwebb.se/source

Ett vanligt sätt att undvika dessa problem är att utelämna php-sluttag. Vi rekommenderar att du utelämnar sluttaggen när du kan. Läs om detta på Zends guidelines för kodning (Zend, ett PHP-ramverk).
http://framework.zend.com/manual/en/cod ... tting.html

Ett annat sätt att påverka dessa felmeddelanden är att använda output buffering. Då lagras all output och skickas i en klump när den är klar. Läs om output buffering:
viewtopic.php?f=12&t=3556
...
..:
.... /mos

Vilka är online

Användare som besöker denna kategori: Google [Bot] och 12 gäster