web-dev-qa-db-fra.com

Comment voir les messages d'erreur lorsque j'obtiens l'écran blanc de la mort?

Comment puis-je voir les messages d'erreur lorsque le site sur lequel je travaille reçoit un écran blanc?

25
sokratis

Mettez cela au bas 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);
33
Mike

The White Screen of Death (Completely Blank Page) ressource sur drupal.org vous guidera à travers les étapes pour voir le message d'erreur ainsi que les problèmes courants qui les provoquent.

Erreurs "invisibles"

Si le rapport d'erreurs est désactivé, vous pouvez obtenir une erreur fatale mais ne pas la voir. Sur un site de production, il est courant que le rapport d'erreurs soit désactivé. Si tel est le cas et PHP a rencontré une erreur irrécupérable, ni une erreur ni un contenu ne seront affichés, donc vous vous retrouvez avec une page complètement vierge.

Ce que vous pouvez faire à ce sujet est d'activer PHP rapport d'erreur afin qu'il affiche un message sur la page elle-même, ou consultez vos fichiers journaux (depuis le serveur) pour rechercher l'erreur. les deux sont expliqués ci-dessous.

Activer le rapport d'erreurs

Bien qu'il puisse être désactivé sur les hôtes commerciaux et les sites de production (pour une bonne raison, afin que les utilisateurs ne voient pas les erreurs), ces erreurs sont l'un de vos meilleurs outils de dépannage. Pour activer le rapport d'erreurs, modifiez temporairement votre fichier index.php (normalement situé dans votre répertoire racine) directement après la première ouverture PHP (ne modifiez pas les informations sur le fichier!) Pour ajouter ce qui suit :

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

Vous pourrez maintenant voir toutes les erreurs qui se produisent directement sur l'écran. Les problèmes de mémoire ne sont peut-être toujours pas affichés, mais c'est la première étape d'un processus d'élimination.

Si vous utilisez une configuration multi-sites et que vous souhaitez que des erreurs apparaissent pour un seul site, vérifiez d'abord le nom de l'hôte comme dans:

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

Si le problème se produit lors de l'exécution de update.php, ouvrez update.php dans un éditeur de texte et décommentez la ligne suivante:

ini_set('display_errors', FALSE);
17
iStryker

Jetez un œil au journal des erreurs Apache, dans Ubuntu, il est situé dans /var/log/Apache2/error.log pour que vous puissiez faire:

tail -f /var/log/Apache2/error.log
10
tostinni

J'ai trouvé un moyen facile de rechercher les erreurs WSOD en exécutant l'ensemble du site via drush, par exemple:

drush rs

Après cela, accédez au site à la nouvelle adresse indiquée (par exemple 127.0.0.1:8080), puis essayez de reproduire le problème et vous verrez toutes les erreurs sur l'écran du terminal. Pas besoin de reconfigurer votre PHP, surtout dans les cas où display_errors échoue (par exemple MAMP).


Je l'ai trouvé autrement en utilisant des débogueurs, par exemple:

  • OS X:

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

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

    Remarque: remplacez httpd par php si vous utilisez drush rs comme ci-dessus.

Ou installer XDebug PHP et générer un fichier de trace (xdebug.auto_trace=1).

2
kenorb

Si vous utilisez drush, vous pouvez voir les messages d'erreur à l'aide de la commande drush-ws.

1
Manikandan

Vous pouvez modifier index.php et terminer le code avec un try/catch. Comme ça:

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

Le message d'erreur affichera le fichier et la ligne de code qui ont provoqué l'erreur.

0
Trincer

Je viens de changer la valeur variable $ update_free_access de FALSE à TRUE et d'exécuter le fichier update.php. Cela a résolu mon problème.

0
Saeed Afzal