Navigation Menu+

Cannot modify header information, headers already sent by – caso di pagina bianca su WordPress

Scritto di 16 Luglio 2015 da

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

2215 Visualizzazioni totali 1 Visualizzazioni odierne

Qualcosa da dire

Ho scritto delle idiozie? Ho commesso un errore di ortografia? Ti ho offeso, o ho pubblicato qualcosa che non vorresti? Hai qualcosa da aggiungere?
Scrivimi :)

*