2009-09-25 5 views
4

Le seul error level in PHP qui stoppe le script mais peut être intercepté et traité doit être déclenché avec la fonction trigger_error() correcte? Je fais référence au niveau d'erreur "E_USER_ERROR". L'erreur "E_ERROR" arrêtera simplement le script et je ne peux rien faire à ce sujet en tant que développeur.Niveaux d'erreur de PHP

Répondre

2

Vous pouvez créer votre propre gestion des erreurs et arrêter le script et faire ce que vous voulez en cas d'erreur.

set_error_handler()

+0

peut la poignée et l'erreur de fonction set_error_handler() avec le niveau "E_ERROR"? – lanmind

+0

Non, les niveaux suivants ne fonctionnent pas avec un gestionnaire d'erreur client: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING – Matthew

7

E_ERROR simplement arrêter le script. Il est destiné à être utilisé pour:

Erreurs d'exécution fatales. Ceux-ci indiquent les erreurs qui ne peuvent pas être récupérées, comme un problème d'allocation de mémoire. L'exécution du script est arrêtée.

Ref

Vous ne pouvez pas gérer les autres types suivants d'erreur pour des raisons similaires:

  • E_PARSE
  • E_CORE_ERROR
  • E_CORE_WARNING
  • E_COMPILE_ERROR
  • E_COMPILE_WARN ING

set_error_handler() peut toutefois gérer les erreurs de suivi:

+0

Vous pouvez intercepter E_ERROR à l'aide d'un script d'arrêt. Vois ma réponse. – James

1

Pas vraiment sûr de ce que votre conduite ou à essayer de le faire, mais si vous êtes à la recherche d'un moyen de « attraper » et faire face aux « erreurs » - Peut-être se pencher sur exceptions.

De Manuel PHP sur les exceptions

Une exception peut être levée, et pris ("attrapée") dans PHP. Code peut être entouré dans un bloc d'essai, à faciliter la capture des exceptions potentiels. Chaque essai doit avoir au moins au moins un bloc catch correspondant. Plusieurs blocs de saisie peuvent être utilisés pour attraper différentes classes d'exeptions. exécution normale (lorsqu'aucune exception jeté dans le bloc try, ou quand une prise correspondant à classe de l'exception levée n'est pas présent) continuera après que le dernier bloc catch défini dans l'ordre . Des exceptions peuvent être lancées (ou renvoyées) dans un bloc catch.

3

Vous pouvez prendre E_ERROR en utilisant un script d'arrêt

de mon affichage http://jarofgreen.wordpress.com/2011/02/04/catching-php-errors/

register_shutdown_function(‘x’); 
function x() { 
$error = error_get_last(); 
if ($error) { 
// deal with $error['file'],$error['line'],$error['message'],$error['type'] 
} 
} 
+1

Notez que vous perdrez la pile en raison du fonctionnement des fonctions d'arrêt. Et si vous voulez attraper seulement E_ERROR avec cette méthode (par exemple parce que vous utilisez un gestionnaire d'erreurs traditionnel pour les autres), vous pouvez filtrer avec 'if ($ error ['type']! = E_ERROR) return;' – Lepidosteus

Questions connexes