Question Comment obtenir des messages d'erreur utiles en PHP?


Je trouve la programmation en PHP assez frustrante. Très souvent, je vais essayer de lancer le script et de récupérer un écran vide. Pas de message d'erreur, juste un écran vide. La cause peut être une erreur de syntaxe simple (mauvais crochet, point-virgule manquant) ou un appel de fonction ayant échoué, ou autre chose.

Il est très difficile de comprendre ce qui a mal tourné. Je finis par commenter le code, en entrant des déclarations "echo" partout, etc. en essayant de réduire le problème. Mais il doit sûrement y avoir un meilleur moyen, non?

Alors, y a-t-il un moyen d'obtenir PHP pour produire un message d'erreur utile comme le fait Java? Quelqu'un peut-il recommander de bons conseils, outils et techniques de débogage PHP?


483
2018-05-10 09:48


origine


Réponses:


Pour les erreurs de syntaxe, vous devez activer l'affichage des erreurs dans php.ini. Par défaut, ils sont désactivés car vous ne voulez pas qu'un "client" voie les messages d'erreur. Vérifiez cette page dans la documentation PHP pour plus d'informations sur les 2 directives: error_reporting et display_errors. display_errors est probablement celui que vous voulez changer. Si vous ne pouvez pas modifier le fichier 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 (mentionnée par Gumbo) pour votre version de PHP pour error_reporting pour obtenir toutes les erreurs. Plus d'informations

3 autres éléments: (1) Vous pouvez vérifier le fichier journal des erreurs car il contient 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, par exemple 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, donc vous utilisez 1 programme pour tout faire.)

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


437
2018-05-10 09:52



Ce qui suit permet toutes les erreurs:

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

Voir aussi les liens suivants


414
2017-07-04 19:46



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

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

Cela remplace les paramètres par défaut de php.ini, qui ne font que signaler les erreurs au journal.


52
2018-05-10 09:54



Configuration PHP

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

  1. display_errors
  2. error_reporting

Dans production, display_errors est généralement défini 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, dans développement, il devrait être réglé sur On, de sorte que les erreurs soient affichées. Vérifier!

error_reporting (à partir de PHP 5.3) est défini par défaut sur E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED (ce qui signifie que tout est affiché sauf pour les avis, les normes strictes et les avis de déchéance). En cas de doute, réglez-le sur E_ALLafficher tout les erreurs Vérifier!

Whoa whoa! Pas de chèque! Je ne peux pas changer mon php.ini!

C'est une honte. Les hôtes habituellement 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 d'autres options!

Configuration d'exécution

Dans le script souhaité, nous pouvons modifier les entrées php.ini en runtime! Ce qui veut dire que ça va tourner quand le script sera lancé! Doux!

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

Ces deux lignes feront le même effet que de modifier les entrées php.ini comme ci-dessus! Impressionnant!

J'ai toujours une page blanche / 500 erreur!

Cela signifie que le script n'a même pas fonctionné! Cela se produit généralement lorsque vous avez une erreur de syntaxe!

Avec des erreurs de syntaxe, le script n'est même pas exécuté. Il échoue à compiler le temps, ce qui signifie qu'il utilisera les valeurs de php.ini qui, si vous n'aviez pas changé, ne permettraient pas l'affichage d'erreurs.

Journaux d'erreur

En outre, PHP enregistre par défaut les erreurs. Dans l'hébergement partagé, il peut s'agir d'un dossier dédié ou du même dossier que le script incriminé.

Si vous avez accès à php.ini, vous pouvez le trouver sous le error_log entrée.


46
2018-02-02 20:47



Il y a une extension vraiment utile appelée "xdebug"cela rendra vos rapports beaucoup plus agréables aussi.


25
2018-05-10 09:59



Pour un dépannage rapide et pratique, je suggère normalement ici SO:

error_reporting(~0); ini_set('display_errors', 1);

à mettre au début du script qui est en cours de dépannage. Ce n'est pas parfait, la variante parfaite est que vous permettez aussi que dans le php.ini et que vous enregistrez les erreurs en PHP pour intercepter les erreurs de syntaxe et de démarrage.

Les paramètres décrits ici affichent toutes les erreurs, notifications et avertissements, y compris les plus stricts, quelle que soit la version de PHP.

Prochaines choses à considérer:

  • Installer Xdebug et activer le débogage à distance avec votre IDE.

Voir aussi:


22
2018-01-24 15:06



Si vous êtes super cool, vous pouvez essayer:

$test_server = $_SERVER['SERVER_NAME'] == "127.0.0.1" || $_SERVER['SERVER_NAME'] == "localhost" || substr($_SERVER['SERVER_NAME'],0,3) == "192";

ini_set('display_errors',$test_server);
error_reporting(E_ALL|E_STRICT);

Cela affichera uniquement les erreurs lorsque vous exécutez localement. Il vous donne également la variable test_server à utiliser à d'autres endroits, le cas échéant.

Toutes les erreurs qui se produisent avant que le script s'exécute ne seront pas détectées, mais pour 99% des erreurs que je fais, ce n'est pas un problème.


15
2017-07-04 19:49



En haut de la page, choisissez un paramètre

error_reporting(E_ERROR | E_WARNING | E_PARSE);

14
2018-05-06 14:14



Pour conserver cela et le rendre confortale, vous pouvez éditer votre fichier php.ini. Il est généralement stocké dans /etc/php.ini ou /etc/php/php.ini, mais plus local php.iniCela peut l'écraser, en fonction des instructions de configuration de votre hébergeur. Vérifiez un phpinfo() fichier pour Loaded Configuration File en haut, pour être sûr de savoir lequel est chargé en dernier.

Recherchez les display_errors dans ce fichier. Il devrait y avoir seulement 3 instances, dont 2 sont commentées.

Changez la ligne non commentée en:

display_errors = stdout

12
2017-07-04 19:54



error_reporting(E_ALL | E_STRICT);
ini_set('display_errors', 1);
ini_set('html_errors', 1);

De plus, vous pouvez obtenir des informations plus détaillées avec xdebug.


11
2017-08-19 15:36



je recommande Nette Tracy pour une meilleure visualisation des erreurs et des exceptions en PHP:

Nette Tracy screenshot


10
2017-07-15 22:38