649 votes

Comment obtenir des messages d'erreur utiles en PHP ?

Il m'arrive souvent d'essayer d'exécuter un script PHP et de me retrouver avec un écran vide. Pas de message d'erreur, juste un écran vide. La cause pourrait être une simple erreur de syntaxe (mauvaise parenthèse, point-virgule manquant), ou un appel de fonction raté, ou quelque chose d'entièrement différent.

Il est très difficile de comprendre ce qui a mal tourné. Je finis par commenter le code, par entrer des instructions "echo" partout, etc. pour essayer de cerner le problème. Mais il doit sûrement y avoir un meilleur moyen, non ?

Existe-t-il un moyen de faire en sorte que PHP produise un message d'erreur utile, comme le fait Java ?

533voto

Darryl Hein Points 33819

Pour les erreurs de syntaxe, vous devez activer l'affichage des erreurs dans le php.ini. Par défaut, ils sont désactivés car vous ne voulez pas qu'un "client" voie les messages d'erreur. Consultez cette page dans la documentation PHP pour plus d'informations sur ces deux directives : error_reporting y display_errors . display_errors est probablement celui que vous voulez changer. Si vous ne pouvez pas modifier le php.ini, vous pouvez également ajouter les lignes suivantes à un fichier .htaccess :

php_flag  display_errors        on
php_value error_reporting       2039

Vous pouvez envisager d'utiliser la valeur de E_ALL (comme mentionné par Gumbo) pour votre version de PHP pour les éléments suivants error_reporting pour obtenir toutes les erreurs. plus d'infos

3 autres points : (1) Vous pouvez vérifier le fichier journal des erreurs car il contiendra toutes les erreurs (sauf si la journalisation a été désactivée). (2) L'ajout des 2 lignes suivantes vous aidera à déboguer les erreurs qui ne sont pas des erreurs de syntaxe :

error_reporting(-1);
ini_set('display_errors', 'On');

(3) Une autre option consiste à utiliser un éditeur qui vérifie les erreurs lorsque vous tapez, tel que PhpEd . PhpEd est également livré avec un débogueur qui peut fournir des informations plus détaillées. (Le débogueur de PhpEd est très similaire à xdebug et s'intègre directement dans l'éditeur de sorte que vous utilisez un seul programme pour tout faire).

Cartman lien est également très bon : http://www.ibm.com/developerworks/library/os-debug/

30 votes

2039 est la valeur de E_ERROR | E_WARNING | E_PARSE | E_CORE_ERROR | E_CORE_WARNING | E_COMPILE_ERROR | E_COMPILE_WARNING | E_USER_ERROR | E_USER_WARNING | E_USER_NOTICE . Voir docs.php.net/manual/fr/errorfunc.constants.php

0 votes

J'aime l'option du fichier .htaccess. Cela m'aide à déboguer dans une zone qui ne fait pas partie du site Web public. Merci beaucoup pour cette astuce !

2 votes

J'ajouterais que la meilleure solution est de consigner les erreurs dans un fichier (et de les y rechercher). Ne comptez pas sur l'affichage des erreurs sur la page - elles peuvent tout gâcher, vous pouvez oublier d'activer le rapport d'erreurs pour le site de production et cela vous causera des problèmes à l'avenir.

450voto

Eljakim Points 3815

Ce qui suit active toutes les erreurs :

ini_set('display_startup_errors', 1);
ini_set('display_errors', 1);
error_reporting(-1);

Voir également les liens suivants

63voto

Tomalak Points 150423

Vous pouvez inclure les lignes suivantes dans le fichier que vous voulez déboguer :

error_reporting(E_ALL);
ini_set('display_errors', '1');

Cela remplace les paramètres par défaut du php.ini, qui font que PHP rapporte les erreurs dans le journal.

2 votes

C'est vrai. Dans ce cas, les valeurs doivent être définies directement dans l'ini -- pour un environnement de développement pur, cela peut être préférable de toute façon.

53voto

Second Rikudo Points 59550

Configuration de PHP

2 entrées dans php.ini dicter la sortie des erreurs :

  1. display_errors
  2. error_reporting

Sur production , display_errors est généralement réglé sur Off (Ce qui est une bonne chose, car l'affichage des erreurs dans les sites de production n'est généralement pas souhaitable !)

Cependant, en développement il doit être réglé sur On pour que les erreurs soient affichées. Vérifiez !

error_reporting (à partir de PHP 5.3) est défini par défaut à E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (c'est-à-dire que tout est affiché sauf les avis, les normes strictes et les avis de dépréciation). En cas de doute, réglez-le sur E_ALL pour afficher tous les erreurs. Vérifiez !

Whoa whoa ! Pas de vérification ! Je ne peux pas changer mon php.ini !

C'est une honte. Habituellement, les hôtes partagés n'autorisent pas la modification de leur fichier php.ini, et donc, cette option est malheureusement indisponible. Mais n'ayez crainte ! Nous avons autres options !

Configuration de l'exécution

Dans le script souhaité, nous pouvons modifier les entrées php.ini en cours d'exécution ! Ce qui signifie qu'il sera exécuté quand le script sera exécuté ! Super !

error_reporting(E_ALL);
ini_set("display_errors", "On");

Ces deux lignes auront le même effet que la modification des entrées du php.ini comme ci-dessus ! Génial !

J'obtiens toujours une page blanche/une erreur 500 !

Cela signifie que le script n'avait même pas été exécuté ! Cela arrive généralement quand on a une erreur de syntaxe !

Avec des erreurs de syntaxe, le script n'arrive même pas à s'exécuter. Il échoue à temps de compilation Ce qui signifie qu'il utilisera les valeurs de php.ini, qui, si vous ne les avez pas modifiées, peuvent ne pas permettre l'affichage des erreurs.

Journaux d'erreurs

De plus, par défaut, PHP enregistre les erreurs. En hébergement mutualisé, il peut se trouver dans un dossier dédié ou sur le même dossier que le script incriminé.

Si vous avez accès au fichier php.ini, vous pouvez le trouver sous la rubrique error_log l'entrée.

30voto

gnarf Points 49213

Il existe une extension très utile appelée " xdebug "Cela rendra vos rapports beaucoup plus agréables.

2 votes

En effet, il s'agit d'un très outil de débogage utile - rend les messages d'erreur beaucoup plus verbeux, avec des traces de pile complètes, des vidages de variables et tout le reste.

2 votes

Oui. Et utilisez ensuite quelque chose comme le plugin VimDebugger pour parcourir votre code et trouver où il ne va pas.

1 votes

NetBeans avec xdebug ici. C'est vraiment génial. Je suis nouveau en PHP (habituellement en ASP.NET) et j'avais déjà utilisé des instructions echo auparavant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X