Come posso vedere i messaggi di errore quando ricevo lo schermo bianco della morte?


25

Come posso vedere i messaggi di errore quando il sito su cui sto lavorando ottiene uno schermo bianco?

Risposte:


33

Mettilo in fondo a settings.php:

error_reporting(-1);  // Have PHP complain about absolutely everything 
$conf['error_level'] = 2;  // Show all messages on your screen, 2 = ERROR_REPORTING_DISPLAY_ALL.
ini_set('display_errors', TRUE);  // These lines just give you content on WSOD pages.
ini_set('display_startup_errors', TRUE);

Questo è ottimo per i siti di sviluppo, anche se preferisco /var/log/apache2/error.log per i siti live. Questo funziona però. :)
Citricguy,

17

La risorsa White Screen of Death (Pagina completamente vuota) su drupal.org ti guiderà attraverso i passaggi per vedere il messaggio di errore e i problemi comuni che li causano.

Errori "invisibili"

Se la segnalazione errori è disattivata, potresti ricevere un errore irreversibile ma non visualizzarlo. In un sito di produzione, è comune avere la segnalazione degli errori disattivata. Se questo è il caso e PHP ha riscontrato un errore irrecuperabile, non verrà visualizzato né un errore né contenuto, quindi si finisce con una pagina completamente vuota.

Quello che puoi fare al riguardo è attivare la segnalazione errori PHP in modo che visualizzi un messaggio sulla pagina stessa o controllare i tuoi file di registro (dal server) per cercare l'errore. Di seguito sono spiegate come fare entrambe.

Abilita segnalazione errori

Sebbene possa essere disattivato su host commerciali e siti di produzione (per una buona ragione, in modo che gli utenti non vedano gli errori), questi errori sono uno dei migliori strumenti per la risoluzione dei problemi. Per abilitare la segnalazione degli errori, modifica temporaneamente il tuo file index.php (normalmente situato nella tua directory principale) direttamente dopo il primo tag PHP di apertura (non modificare le informazioni sul file effettivo!) Per aggiungere quanto segue:

error_reporting(E_ALL);
ini_set('display_errors', TRUE);
ini_set('display_startup_errors', TRUE);

Ora sarai in grado di vedere eventuali errori che si verificano direttamente sullo schermo. I problemi di memoria potrebbero non essere ancora visualizzati, ma è il primo passo di un processo di eliminazione.

Se si utilizza un'installazione multi-sito e si desidera che vengano visualizzati solo errori per un sito, verificare prima il nome dell'host come in:

if ($_SERVER['HTTP_HOST']==='some.domain.name.here') {
  error_reporting(E_ALL);
  ini_set('display_errors', TRUE);
  ini_set('display_startup_errors', TRUE);
}

Se il problema si verifica durante l'esecuzione di update.php, apri update.php in un editor di testo e decommenta la seguente riga:

ini_set('display_errors', FALSE);

10

Dai un'occhiata al log degli errori di Apache, in Ubuntu si trova in /var/log/apache2/error.logmodo da poter fare:

tail -f /var/log/apache2/error.log

2
sudo tail -f /var/log/apache2/error.log
Citricguy,

1
se hai molti vhost con file di registro personalizzati per ognuno di essi, usa questo: sudo tail -f /var/log/apache2/*.log quindi aggiorna la pagina che termina con wsod
izus,

2

Ho trovato un modo semplice per rintracciare gli errori WSOD eseguendo l'intero sito tramite drush, ad esempio:

drush rs

Dopodiché accedi al sito al nuovo indirizzo indicato (ad es. 127.0.0.1:8080), Quindi prova a riprodurre il problema e vedrai tutti gli errori sullo schermo del terminale. Non c'è bisogno di riconfigurare il tuo PHP, specialmente nei casi in cui display_errorsfallisce (es. MAMP).


Altro modo complicato l'ho trovato usando i debugger, ad esempio:

  • OS X:

    sudo dtruss -fn httpd 2>&1 | grep -i error
  • Linux:

    sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error

    Nota: cambia httpdin phpse stai usando drush rscome sopra.

O installare l' XDebugestensione PHP e generare un file di traccia ( xdebug.auto_trace=1).


1
Signore, salvate la vita. Nessuna delle assurdità delle impostazioni di php ha funzionato per me, ma questo ha funzionato!
Greg Somers,

1

Se stai usando drush, puoi vedere i messaggi di errore usando il comando drush-ws.


0

Ho appena cambiato il valore della variabile $ update_free_access da FALSE a TRUE ed eseguito il file update.php. Ha risolto il mio problema.


0

Puoi modificare index.php e concludere il codice con un tentativo / cattura. Come questo:

try {
    define('DRUPAL_ROOT', getcwd());
    require_once DRUPAL_ROOT . '/includes/bootstrap.inc';
    drupal_bootstrap(DRUPAL_BOOTSTRAP_FULL);
    menu_execute_active_handler();
} catch (Error $t) {
    error_log('Error at Line:' . $t->getLine() . ' File: ' . $t->getFile() . ' Message:' . $t->getMessage() );
    print '<div>Message: ' . $t->getMessage() . '</div>';
    print '<div>File:' . $t->getFile() . '</div>';
    print '<div>Line:' . $t->getLine() . '</div>';
}

Il messaggio di errore mostrerà il file e la riga di codice che hanno causato l'errore.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.