¿Cómo ver los mensajes de error cuando recibo la pantalla blanca de la muerte?

25

¿Cómo puedo ver los mensajes de error cuando el sitio en el que estoy trabajando tiene una pantalla en blanco?

sokratis
fuente

Respuestas:

33

Pon esto en la 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);
Micro
fuente
Esto es ideal para sitios de desarrollo, aunque prefiero /var/log/apache2/error.log para sitios en vivo. Sin embargo, esto funciona. :)
Citricguy
17

El recurso Pantalla blanca de la muerte (página completamente en blanco) en drupal.org lo guiará paso a paso para ver el mensaje de error y los problemas comunes que los causan.

Errores "invisibles"

Si el informe de errores está desactivado, podría estar recibiendo un error fatal pero no verlo. En un sitio de producción, es común que los informes de errores estén desactivados. Si ese es el caso y PHP ha encontrado un error irrecuperable, no se mostrará ni un error ni contenido, por lo tanto, terminará con una página completamente en blanco.

Lo que puede hacer al respecto es activar el informe de errores de PHP para que muestre un mensaje en la página en sí, o verifique sus archivos de registro (del servidor) para buscar el error. Cómo hacer ambas cosas se explican a continuación.

Habilitar informes de errores

Aunque puede desactivarse en hosts comerciales y sitios de producción (por una buena razón, para que los usuarios no vean los errores), estos errores son una de sus mejores herramientas para la resolución de problemas. Para habilitar el informe de errores, edite temporalmente su archivo index.php (normalmente ubicado en su directorio raíz) directamente después de la primera etiqueta PHP abierta (¡no edite la información real del archivo!) Para agregar lo siguiente:

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

Ahora podrá ver cualquier error que ocurra directamente en la pantalla. Es posible que los problemas de memoria aún no se muestren, pero es el primer paso en un proceso de eliminación.

Si está utilizando una configuración de sitios múltiples y solo desea que aparezcan errores para un sitio, primero verifique el nombre del host como en:

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

Si el problema ocurre mientras ejecuta update.php, abra update.php en un editor de texto y elimine el comentario de la siguiente línea:

ini_set('display_errors', FALSE);
iStryker
fuente
10

Eche un vistazo al registro de errores de Apache, en Ubuntu está ubicado /var/log/apache2/error.logpara que pueda hacer:

tail -f /var/log/apache2/error.log
tostinni
fuente
2
sudo tail -f /var/log/apache2/error.log
Citricguy
1
si tiene muchos vhosts con archivos de registro personalizados para cada uno de ellos, simplemente use esto: sudo tail -f /var/log/apache2/*.log y luego actualice la página que termina con wsod
izus
2

Encontré una manera fácil de rastrear los errores de WSOD ejecutando todo el sitio a través de drush, por ejemplo:

drush rs

Después de eso, acceda al sitio en la nueva dirección dada (por ejemplo 127.0.0.1:8080), luego intente reproducir el problema y verá todos los errores en la pantalla del terminal. No es necesario volver a configurar su PHP, especialmente en los casos en que display_errorsfalla (por ejemplo, MAMP).


Otra forma complicada que lo he encontrado al usar depuradores, por ejemplo:

  • OS X:

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

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

    Nota: Cambie httpda phpsi está usando drush rslo anterior.

O instalar la XDebugextensión PHP y generar un archivo de seguimiento ( xdebug.auto_trace=1).

kenorb
fuente
1
Usted señor, es un salvavidas. Ninguno de los cambios de configuración de php sin sentido funcionó para mí, ¡pero esto funcionó!
Greg Somers
1

Si está usando drush, puede ver mensajes de error usando el comando drush-ws.

Manikandan
fuente
0

Acabo de cambiar el valor de la variable $ update_free_access de FALSE a TRUE y ejecuté el archivo update.php. Resolvió mi problema.

Saeed Afzal
fuente
0

Puede modificar index.php y concluir el código con un try / catch. Me gusta esto:

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>';
}

El mensaje de error mostrará el archivo y la línea de código que causó el error.

Trincer
fuente