Respostas:
Coloque isso na parte inferior de 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);
O recurso Tela branca da morte (página completamente em branco) em drupal.org o guiará pelas etapas para ver a mensagem de erro, bem como os problemas comuns que as causam.
Erros "invisíveis"
Se o relatório de erros estiver desativado, você pode estar recebendo um erro fatal, mas não o está vendo. Em um site de produção, é comum ter o relatório de erros desativado. Se for esse o caso e o PHP tiver encontrado um erro irrecuperável, nenhum erro nem conteúdo serão exibidos; portanto, você terá uma página completamente em branco.
O que você pode fazer sobre isso é ativar o relatório de erros do PHP para exibir uma mensagem na própria página ou verificar seus arquivos de log (do servidor) para procurar o erro. Como fazer os dois são explicados abaixo.
Ativar relatório de erros
Embora possa ser desativado em hosts comerciais e sites de produção (por um bom motivo, para que os usuários não vejam os erros), esses erros são uma das melhores ferramentas para solucionar problemas. Para habilitar o relatório de erros, edite temporariamente o arquivo index.php (normalmente localizado no diretório raiz) diretamente após a primeira tag PHP de abertura (não edite as informações reais do arquivo!) Para adicionar o seguinte:
error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE);
Agora você poderá ver os erros que estão ocorrendo diretamente na tela. Os problemas de memória ainda podem não ser exibidos, mas é o primeiro passo no processo de eliminação.
Se você estiver usando uma configuração de vários sites e desejar que apenas apareçam erros em um site, verifique primeiro o nome do host como em:
if ($_SERVER['HTTP_HOST']==='some.domain.name.here') { error_reporting(E_ALL); ini_set('display_errors', TRUE); ini_set('display_startup_errors', TRUE); }
Se o problema ocorrer durante a execução do update.php, abra o update.php em um editor de texto e remova o comentário da seguinte linha:
ini_set('display_errors', FALSE);
Dê uma olhada no log de erros do Apache, no Ubuntu em que está localizado, /var/log/apache2/error.log
para que você possa:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
Eu encontrei uma maneira fácil de rastrear os erros do WSOD executando o site inteiro via drush
, por exemplo:
drush rs
Depois disso, acesse o site no novo endereço fornecido (por exemplo 127.0.0.1:8080
), tente reproduzir o problema e você verá todos os erros na tela do terminal. Não há necessidade de reconfigurar seu PHP, especialmente nos casos em que display_errors
falha (por exemplo, MAMP).
Outra maneira complicada que eu encontrei usando depuradores, por exemplo:
OS X:
sudo dtruss -fn httpd 2>&1 | grep -i error
Linux:
sudo strace -f $(pgrep -fn httpd) 2>&1 | grep -i error
Nota: Altere httpd
para php
se você estiver usando drush rs
como acima.
Ou instalando a XDebug
extensão PHP e gere um arquivo de rastreamento ( xdebug.auto_trace=1
).
Se você estiver usando drush, poderá ver mensagens de erro usando o comando drush-ws.
Acabei de alterar o valor da variável $ update_free_access de FALSE para TRUE e executei o arquivo update.php. Isso resolveu meu problema.
Você pode modificar o index.php e agrupar o código com uma tentativa / captura. Como isso:
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>';
}
A mensagem de erro mostrará o arquivo e a linha de código que causou o erro.