Risposte:
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);
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);
Dai un'occhiata al log degli errori di Apache, in Ubuntu si trova in /var/log/apache2/error.log
modo da poter fare:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
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_errors
fallisce (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 httpd
in php
se stai usando drush rs
come sopra.
O installare l' XDebug
estensione PHP e generare un file di traccia ( xdebug.auto_trace=1
).
Se stai usando drush, puoi vedere i messaggi di errore usando il comando drush-ws.
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.
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.