Maison >développement back-end >tutoriel php >phpmaster | Gestion des erreurs en php
<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>Le déclenchement des erreurs avec Trigger_error () est utile lorsque vous avez une infrastructure de gestion des erreurs en place, vous permettant d'unifier la gestion des erreurs personnalisées et des erreurs et avertissements soulevés par PHP. Si vous souhaitez implémenter des stratégies de traitement des erreurs personnalisées telles que l'envoi d'un e-mail ou des erreurs d'enregistrement dans une base de données en fonction de leur gravité, vous devrez définir les gestionnaires d'erreurs personnalisés à l'aide de set_error_handler (). La fonction accepte deux arguments: une fonction de rappel ou une méthode statique qui sera invoquée lorsque l'erreur est augmentée, et éventuellement le niveau d'erreur de la fonction / méthode gère. La signature du rappel est:
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>Le extrait ci-dessus enregistre un gestionnaire d'erreurs qui fait ce qui suit: Lorsque des erreurs non mortelles se produisent, un enregistrement sera inséré dans la base de données au lieu d'afficher l'erreur et de le journaliser dans un fichier; Lorsqu'une erreur mortelle se produit, elle sera enregistrée dans la base de données et terminera votre script. Il existe cependant certaines limites aux gestionnaires d'erreurs personnalisés dont vous devez être conscient. Le gestionnaire d'erreurs contourne le comportement de gestion des erreurs de PHP, il ne peut donc pas gérer les erreurs qui peuvent survenir au sein de votre gestionnaire lui-même. Dans le cas où le serveur de base de données est en panne, par exemple, la fonction ci-dessus ne parviendrait pas à enregistrer le journal. En outre, le gestionnaire d'erreurs n'est pas en mesure d'attraper certaines erreurs internes, comme E_Core_error et E_Compile_error, ou E_Strict Errers dans le même fichier dans lequel le gestionnaire est défini car ces erreurs se produisent avant que le gestionnaire ait une chance d'être enregistré.
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)Si une exception est lancée par la méthode fictive getDataFromService (), elle sera prise dans le bloc de capture et un message sera affiché. Si getDataFromService () exécute avec succès, le flux passera sur le bloc de capture et continuera le reste du script. Toutes les exceptions qui sont lancées et non capturées généreront une erreur E_Fatal avec le message «Exception non approuvée». La classe d'exception propose six méthodes différentes pour accéder aux informations sur ce qui a causé le problème, comme le montre le tableau ci-dessous.
<span><span><?php </span></span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error('Value of $test must be 1 or less', E_USER_NOTICE); </span></span><span><span>}</span></span>Le code ci-dessus définit deux nouveaux types d'exceptions personnalisés, NameException et EmailException, qui peut être utilisé pour indiquer différentes erreurs. Ensuite, dans le bloc d'essai, le code vérifie si des valeurs ont été fournies pour les variables $ nom et $ e-mail. Si l'un ou l'autre est vide, l'exception appropriée est lancée à l'aide de lancer. Le bloc de capture correspondant est exécuté qui gère l'erreur.
handler(int $errno, string $errstr, string $errfile, int $errline, array $errcontext)
<span><span><?php </span></span><span><span>function errorHandler($errno, $errstr, $errfile, $errline) { </span></span><span> <span>static $db; </span></span><span> <span>if (empty($db)) { </span></span><span> <span>$db = new PDO(DSN, DBUSER, DBPASS); </span></span><span> <span>} </span></span><span> </span><span> <span>$query = "INSERT INTO errorlog (severity, message, filename, lineno, time) VALUES (?, ?, ?, ?, NOW())"; </span></span><span> <span>$stmt = $db->prepare($query); </span></span><span> </span><span> <span>switch ($errno) { </span></span><span> <span>case E_NOTICE: </span></span><span> <span>case E_USER_NOTICE: </span></span><span> <span>case E_DEPRECATED: </span></span><span> <span>case E_USER_DEPRECATED: </span></span><span> <span>case E_STRICT: </span></span><span> <span>$stmt->execute(array("NOTICE", $errstr, $errfile, $errline)); </span></span><span> <span>break; </span></span><span> </span><span> <span>case E_WARNING: </span></span><span> <span>case E_USER_WARNING: </span></span><span> <span>$stmt->execute(array("WARNING", $errstr, $errfile, $errline)); </span></span><span> <span>break; </span></span><span> </span><span> <span>case E_ERROR: </span></span><span> <span>case E_USER_ERROR: </span></span><span> <span>$stmt->execute(array("FATAL", $errstr, $errfile, $errline)); </span></span><span> <span>exit("FATAL error <span><span>$errstr</span> at <span>$errfile</span>:<span>$errline</span>"</span>); </span></span><span> </span><span> <span>default: </span></span><span> <span>exit("Unknown error at <span><span>$errfile</span>:<span>$errline</span>"</span>); </span></span><span> <span>} </span></span><span><span>} </span></span><span> </span><span><span>set_error_handler("errorHandler"); </span></span><span> </span><span><span>$test = 5; </span></span><span><span>if ($test > 1) { </span></span><span> <span>trigger_error("Value of <span><span>$test</span> must be 1 or less"</span>, E_USER_NOTICE); </span></span><span><span>}</span></span>
La gestion des erreurs en PHP est cruciale pour maintenir l'intégrité et la fonctionnalité d'une application Web. Il aide les développeurs à identifier et à résoudre les problèmes qui peuvent survenir lors de l'exécution d'un script. Sans gestion des erreurs appropriée, un problème mineur peut causer des problèmes importants, tels que le fait de placer l'application ou d'exposer des informations sensibles aux utilisateurs. Il améliore également l'expérience utilisateur car il permet aux développeurs de contrôler ce que l'utilisateur voit lorsqu'une erreur se produit, plutôt que d'afficher des messages d'erreur déroutants.
Par défaut, PHP envoie un rapport d'erreur au journal d'erreur du serveur et affiche un message d'erreur à l'écran. Ce comportement n'est pas idéal pour un site Web en direct car il peut révéler des informations sensibles à l'utilisateur. Par conséquent, il est recommandé de modifier les paramètres de gestion des erreurs par défaut pour un site Web en direct.
PHP classe les erreurs en plusieurs types, y compris les erreurs mortelles, les avertissements, les erreurs d'analyse et les avis. Les erreurs fatales sont des erreurs critiques, comme appeler une fonction inexistante ou écrire dans un fichier qui n'est pas écrivable. Les avertissements sont des erreurs non mortelles qui permettent au script de continuer à fonctionner. Les erreurs d'analyse se produisent lorsqu'il y a une erreur de syntaxe dans le script. Les avis sont des erreurs mineures ou des erreurs possibles que PHP rencontre lors de l'exécution d'un script.
PHP fournit plusieurs fonctions pour personnaliser la gestion des erreurs, telles que set_error_handler () et set_exception_handler (). Ces fonctions vous permettent de définir des règles et des exceptions de gestion des erreurs personnalisées. Vous pouvez spécifier une fonction personnalisée pour gérer les erreurs, qui peuvent être utiles pour la journalisation des erreurs ou l'envoi de notifications d'erreur.
Une exception est un événement qui se produit lors de l'exécution d'un script qui perturbe le flux normal des instructions du script. Lorsqu'une exception est lancée, PHP cessera d'exécuter le script et commencera à chercher un bloc de capture pour gérer l'exception. Si aucun bloc de capture n'est trouvé, PHP affichera une erreur fatale et cessera d'exécuter le script.
PHP fournit l'essai, la capture et enfin des blocs pour gérer les exceptions. Le bloc d'essai contient le code qui peut lancer une exception. Le bloc Catch contient le code pour gérer l'exception. Le bloc enfin contient le code qui sera exécuté, que ce soit une exception ou non.
La principale différence entre les erreurs et les exceptions dans PHP est la façon dont ils sont gérés. Les erreurs sont gérées par le moteur PHP et peuvent être contrôlées à l'aide des paramètres de rapport d'erreur et des gestionnaires d'erreurs personnalisés. Les exceptions, en revanche, sont gérées par le script et peuvent être contrôlées à l'aide de Try, Catch et enfin des blocs.
Vous pouvez désactiver les rapports d'erreur en PHP en utilisant la fonction error_reportting () avec 0 comme argument. Cependant, la désactivation des rapports d'erreurs n'est pas recommandée pour un site Web en direct, car il peut rendre difficile l'identification et résoudre les problèmes.
L'opérateur @ dans PHP est utilisé pour supprimer les messages d'erreur. Lorsqu'il est admis à une expression en PHP, tous les messages d'erreur qui pourraient être générés par cette expression seront ignorés.
PHP Fournit la fonction error_log () pour envoyer un message d'erreur au journal d'erreur du serveur ou à un fichier spécifié. Cette fonction peut être utile pour suivre les erreurs et le débogage. Vous pouvez également configurer PHP pour enregistrer toutes les erreurs en modifiant la directive log_errors dans le fichier php.ini.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!