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