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.