Respuestas:
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);
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);
Eche un vistazo al registro de errores de Apache, en Ubuntu está ubicado /var/log/apache2/error.log
para que pueda hacer:
tail -f /var/log/apache2/error.log
sudo tail -f /var/log/apache2/error.log
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_errors
falla (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 httpd
a php
si está usando drush rs
lo anterior.
O instalar la XDebug
extensión PHP y generar un archivo de seguimiento ( xdebug.auto_trace=1
).
Si está usando drush, puede ver mensajes de error usando el comando drush-ws.
Acabo de cambiar el valor de la variable $ update_free_access de FALSE a TRUE y ejecuté el archivo update.php. Resolvió mi problema.
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.