it-swarm.it

Come posso vedere i messaggi di errore quando ricevo la schermata bianca della morte?

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

25
sokratis

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);
33
Mike

The White Screen of Death (Pagina completamente vuota) La risorsa 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 degli errori è disattivata, potresti ricevere un errore irreversibile ma non vederlo. In un sito di produzione, è comune avere la segnalazione degli errori disattivata. Se questo è il caso e PHP ha riscontrato un errore irreversibile, non verrà visualizzato né un errore né contenuto, quindi si finisce con una pagina completamente vuota.

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

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 la prima apertura PHP (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);
17
iStryker

Dai un'occhiata al log degli errori di Apache, in Ubuntu si trova in /var/log/Apache2/error.log così puoi fare:

tail -f /var/log/Apache2/error.log
10
tostinni

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

drush rs

Dopodiché accedi al sito al nuovo indirizzo indicato (ad esempio 127.0.0.1:8080), quindi prova a riprodurre il problema e vedrai tutti gli errori sullo schermo del terminale. Non è necessario riconfigurare il tuo PHP, specialmente nei casi in cui display_errors non riesce (ad es. MAMP).


Un altro modo complicato l'ho trovato usando i debugger, ad es .:

  • 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 httpd in php se stai usando drush rs come sopra.

O installando XDebug PHP e genera un file di traccia (xdebug.auto_trace=1).

2
kenorb

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

1
Manikandan

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.

0
Trincer

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
Saeed Afzal