PHP – Modificare l’header anche dopo l’inizio dell’invio della risposta

Man mano che il server elabora la risposta HTML comincia ad inviare le informazioni di intestazione, ovvero l’header del protocollo HTTP che contiene informazioni come per, esempio , il content-type e la codifica.

Una volta iniziato l’invio dell’header, tendenzialmente, non si possono aggiungere o modificare le intestazioni neanche con la funzione header() del PHP.

Per esempio non possiamo cambiare la location (effettuando un redirect) col seguente codice:

if($_POST[‘nomeVar’] == “sposta”)

{

echo “Adesso ti sposto”;
header(“location: daunaltraparte.php”);

}

Quindi la soluzione più valida è sicuramente quella di modificare opportunamente il codice per avere gli header tutti in testa (come suggerisce il nome), oppure abilitare il buffering direttamente da codice con le opportune funzioni PHP (il funzionamento dipende anche dall’hosting).

Ecco tre soluzioni alternative per abilitare il buffering:

  1. Nel php.iniabilitare l’opzione output_buffering = On.
  2. Abilitare nel codice ini_set(‘output_buffering’, ‘On’);
  3. Usare le funzioni ob_start(), ob_end_flush();

Il buffering inevitabilmente porterà una risposta HTTP inviata leggermente in ritardo al client, solitamente l’utente non ha alcuna percezione di questi tempi.