Ultimamente sul server che ho acquistato mi sono imbattuto nell’errore di White Screen of Death (pagina del sito bianca), attivato il debug ho verificato questo errore :
Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-config.php:1) in /XXX/wp-login.php on line 425
Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-config.php:1) in /XXX/wp-login.php on line 438
Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-config.php:1) in /XXX/pluggable.php on line 925
Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-config.php:1) in /uXXX/wp-includes/pluggable.php on line 926
Warning: Cannot modify header information - headers already sent by (output started at /XXX/wp-config.php:1) in /XXX/wp-includes/pluggable.php on line 927
l’installazione era perfettamente funzionante su altro server. Il problema è subito chiaro, esiste un redirect che non viene gestito perchè siccome “headers already sent” allora “Cannot modify header information” .
Altre casistiche sono:
- un output giĂ esistente come
- una linea vuota precedente all’apertura di php
- un echo
- una dichiarazione header (tipo “header(‘Content-Type: ‘.get_bloginfo(‘html_type’).’; charset=’.get_bloginfo(‘charset’));” )
Come poter permettere che le “header information” siano modificabili dopo essere giĂ state inviate? L’ideale è poter modificare la variabile output_buffering in php.ini
I valori di questa proprietĂ possono essere âOnâ, âOffâ o un numero intero: il valore di performance è di 4096 ( 4 kilobytes ).
Se abilitiamo lâoutput buffering accade questo (fonte lo stesso file php.ini) :
Output buffering allows you to send header lines (including cookies) even after you send body content, at the price of slowing PHPâs output layer a bit. You can enable output buffering during runtime by calling the output buffering functions. You can also enable output buffering for all files by setting this directive to On.
(LâOutput buffering ti permette di inviare linee (compresi i cookie), anche dopo che si invia il contenuto del corpo, al prezzo del rallentamento della produzione dellâoutput PHP. Ă possibile attivare lâOutput buffering durante lâesecuzione ( a runtime ) usando le relative funzioni. Ă inoltre possibile abilitare lâOutput buffering per tutti i file impostando questa direttiva su On.)
Esiste comunque la possibilitĂ di attivare lâOutput buffering a runtime usando delle specifiche funzioni, risolvendo lâerrore âheaders already sentâ senza mettere mani sul php.ini. La soluzione piĂš immediata si ha eichiamando ob_start() come primissima linea del nostro codice setteremo a runtime lâoutput buffering su on e non otterremo piĂš errori. Per una documentazione completa ref.outcontrol