Headers already sent: trovare l'errore in PHP

ATTENZIONE! Il post ha più di 2 anni e le informazioni contenute potrebbero essere obsolete (ad esempio a causa di un aggiornamento di versione rispetto agli elementi descritti o links modificati da siti esterni).

Tentando di eseguire un redirect con PHP può accadere che non funzioni; solitamente la causa è che viene stampato in output qualcosa prima della funzione di redirect:

<?php
header("Location: " . $url);
exit;
?>

Ad esempio questo produrrà un errore:

<html>
<body>
Test
</body>
</html>
<?php
header("Location: " . $url);
exit;
?>

Non sempre però l'errore è così visibile: può capitare che l'output sia eseguito da un file incluso nello script, magari fatto anche da qualcun altro.
Per scovare il punto in cui si verifica il problema si può utilizzare la funzione headers_sent(), che permette di trovare il file e la riga esatta in questo modo:

// Le variabili $filename e $linenum vengono inizializzate dalla funzione
if (headers_sent($filename, $linenum)) {
 echo "Headers already sent in $filename on line $linenum";
 die("Error: headers already sent!");
}

 

Condividi questo post


Commenti