Daily Archives: 25 Settembre, 2009

Errore PHP: Cannot modify header information – headers already sent

Pubblicato da

Errore PHP: Cannot modify header information – headers already sent

E’ stato scritto tantissimo su questo comune errore PHP ma, in giro, ho notato che non c’è quasi mai una trattazione completa.

In primis diciamo che è un problema che sorge quando si usano funzioni di sessione del tipo session_start(), oppure funzioni di modifica delle intestazioni come header(), oppure ancora quando settiamo i cookie con setcookie().
Le cause:

  • Abbiamo usato una delle sopra citate funzioni dopo il tag <html> o comunque dopo aver impostato un output
  • Una linea bianca prima del tag di apertura <?php , anche un semplice spazio bianco, rappresenta un output
  • Nel file è incluso un BOM. Una piccola sequenza di byte che viene posizionata all’inizio di un flusso di dati di puro testo per indicarne il tipo di codifica Unicode

Soluzioni:

  • Le funzioni sopra citate vanno messe in testa al file PHP. Prima di qualsiasi altro codice.
  • Cancellare qualsiasi spazio bianco prima del tag di apertura. Potrebbe non essere uno spazio vuoto ma venire codificato dall’interprete PHP
  • Salvare il file con codifica UTF-8 senza BOM. Un buon editor come Notepad++ permette di farlo con semplicità.
  • Settare in php.ini il valore output_buffering=4096 (usarlo solo se necessario in quanto si rallenta il processo di output)
  • Iniziare lo script PHP con la funzione ob_start() (alternativo alla soluzione precedente) che attiva l’output_buffering senza stabilirne la grandezza

Link: funzioni di controllo del output in PHP