Errore PHP: Headers already sent by...


Quando si utilizza una funzione PHP che manipola gli header HTTP come per es. header(), setcookie(), session_start() è importante utilizzare queste funzioni prima di generare un qualsiasi flusso al cliente. Nel momento in cui l'informazione è stata inviata al cliente (in generale: l'inizio della visualizzazione di una pagina web), ciò vorrà dire che gli header HTTP sono già stati automaticamente inviati al cliente. Questo tipo di flusso è spesso inviato con delle funzioni echo, print, ecc.

Se si ha uno spazio libero prima il primo tag php, allora questo spazio potrà essere inviato come inizio pagina al cliente e gli header HTTP lo precederanno automaticamente per segnalare al cliente di quale tipo di flusso si tratta.
Ecco un esempio supportato dalla pagina di it.Kioskea.net:

Server: Apache
X-Powered-By: Php/4.4.0-0.dotdeb.0
Keep-Alive: timeout=15, max=50
Connection: Keep-Alive
Transfert-Encoding: chunked
Content-type: text/[/contents/89-introduzione-all-html html]; charset=iso-8859-1

Così facendo bisogna ben capire il sistema:
Si utilizza echo o print all'inizio del proprio script, ugualmente se si ha uno spazio nel proprio script che non è compreso nei tag php questo sarà considerato come facente parte della sorgente della pagina da inviare e sarà preceduto dagli header, ciò può causare un errore.
Il server invia questi dati e li precede per default dagli header che segnalano che questa è una pagina html. Se dopo, nello stesso script, si utilizza una funzione che modifica gli header, questa non potrà più essere funzionale poiché gli header saranno già stati inviati. Così si verifica un errore del tipo headers already sent.

Utilizzo di header() dopo session_star()

  • Come fare un reindirizzamento con header() se prima utilizzo session_star() ?
  • Non è possibile, in questo caso sarà meglio scegliere un modo diverso per fare il reindirizzamento. Di solito si fa in javascript o ancora meglio in HTML nel tag meta Refresh.
I nostri contenuti sono creati in collaborazione con esperti di high-tech, sotto la direzione di Jean-François Pillou, fondatore di CCM.net. CCM è un sito di high-tech leader a livello internazionale ed è disponibile in 11 lingue.
Il documento intitolato « Errore PHP: Headers already sent by... » dal sito CCM (it.ccm.net) è reso disponibile sotto i termini della licenza Creative Commons. È possibile copiare, modificare delle copie di questa pagina, nelle condizioni previste dalla licenza, finché questa nota appaia chiaramente.