Como ver as mensagens de erro quando recebo a tela branca da morte?


25

Como posso ver as mensagens de erro quando o site em que estou trabalhando recebe uma tela branca?

Respostas:


33

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

Isso é ótimo para sites de desenvolvimento, embora eu prefira /var/log/apache2/error.log para sites ao vivo. Isso funciona embora. :)
Citricguy

17

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

10

Dê uma olhada no log de erros do Apache, no Ubuntu em que está localizado, /var/log/apache2/error.logpara que você possa:

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

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

11
se você tiver muitos vhosts com arquivos de log personalizado para cada um deles, basta usar este: cauda sudo -f /var/log/apache2/*.log em seguida, atualizar a página que termina com wsod
izus

2

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_errorsfalha (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 httpdpara phpse você estiver usando drush rscomo acima.

Ou instalando a XDebugextensão PHP e gere um arquivo de rastreamento ( xdebug.auto_trace=1).


11
Você é um salva-vidas. Nenhuma das absurdas alterações nas configurações do php funcionou para mim, mas isso funcionou!
Greg Somers

1

Se você estiver usando drush, poderá ver mensagens de erro usando o comando drush-ws.


0

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.


0

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.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.