Gérer les erreurs fatales en PHP avec register_shutdown_function()
Selon le commentaire sur cette réponse il est possible d'intercepter les Erreurs Fatales à travers un fonction d'arrêt qui ne peut être capturé à l'aide de set_error_handler()
.
Cependant, je ne pouvais pas savoir comment déterminer si l'arrêt s'est produite en raison d'une erreur fatale, ou en raison du script d'atteindre sa fin.
En outre, le débogage de backtrace fonctions semblent être disparu dans la fonction d'arrêt, le rendant assez inutile pour l'enregistrement de la trace de la pile d'où l'Erreur Fatale s'est produite.
Donc ma question est: quelle est la meilleure façon de réagir sur les Erreurs Fatales (surtout pas défini les appels de fonction) tout en gardant la possibilité de créer une bonne trace?
Vous devez vous connecter pour publier un commentaire.
Cela fonctionne pour moi:
Cependant, vous le savez probablement déjà, mais juste pour s'assurer que: vous ne pouvez pas récupérer à partir d'une E_ERROR en aucune façon.
Comme pour le backtrace, vous ne pouvez pas... 🙁 Dans la plupart des cas d'une erreur fatale, en particulier fonction non définie erreurs, vous n'avez pas vraiment besoin. Repérer le fichier/ligne où elle s'est produite est suffisante. La trace n'est pas pertinent dans ce cas.
Une façon de distinguer entre l'erreur fatale et la bonne application de l'arrêt avec le register_shutdown_function est de définir une constante comme la dernière ligne de votre programme, et de vérifier ensuite si la constante est définie:
Si le programme atteint la fin, il ne pouvait pas avoir rencontré une erreur irrécupérable, donc nous ne savons pas à l'exécution de la fonction si la constante est définie.
error_get_last() est un tableau avec toutes les informations concernant l'erreur fatale que vous avez besoin de debug, mais il n'aura pas de trace, comme cela a été mentionné.
En règle générale, si votre programme php a rencontré une erreur irrécupérable (par opposition à une exception), vous souhaitez que le programme blow up de sorte que vous pouvez trouver et résoudre le problème. J'ai trouvé register_shutdown_function utile pour les environnements de production où vous souhaitez les rapports d'erreur off, mais voulez un moyen pour enregistrer l'erreur dans le fond de sorte que vous pouvez y répondre. Vous pouvez également utiliser la fonction de diriger l'utilisateur vers une sympathique page html dans le cas d'une telle erreur, de sorte que vous n'avez pas juste une page blanche.
Juste une belle astuce pour obtenir le courant error_handler method =)
Aussi, je wan ' t à noter que si vous appelez
Php s'arrête en affichant l'erreur, sinon le texte d'erreur sera envoyé au client préalablement à votre gestionnaire d'erreur
- Je utiliser "ob_start" pour cela.
display_errors = Off
etlog_errors = On
dansphp.ini
, et de regarder dans le fichier journal des erreurs. Alors vous ne pensez même pas à écrire un tel code.