Informat'Hic - Fiche du blog
http://www.informathic.com/
Classé dans : High-Tech & Internet
fr Thu, 04 Feb 2010 20:55:11 +0100 Francis Besset http://blogs.law.harvard.edu/tech/rss Dotclear Gestion des erreurs en PHP http://feedproxy.google.com/~r/InformatHic/~3/vAsSysj-_XM/Gestion-des-erreurs-en-PHP urn:md5:bac7ab26b89b2a11e6480f02438dc672 Sat, 09 Jan 2010 12:18:00 +0100 Francis Besset Dev erreur gestion php Lorsque vous créez votre application, votre site, votre blog, etc, il est très important de faire remonter les erreurs afin que celles-ci puissent être corrigées par le ou les développeurs. En temps normal lorsque vos utilisateurs utiliseront votre application, ils sont susceptibles de rencontrer des erreurs de codages ou d'évènements. Ca peut ne pas être bien grave, tout comme vous faire une mauvaise réputation si jamais celle-ci est récurrente. De plus le visiteur sera le seul à la visualiser, et il aura donc le choix de vous la faire remonter tout comme d'aller voir ailleurs. Dans le dernier cas c'est crédibilité zéro ! Alors comment faire en sorte d'être tenu au courant en cas d'erreur sur votre application PHP ? La réponse se situe au niveau de la fonction set_error_handler() . Elle vous permettra d'indiquer la fonction ou méthode qui doit être appelée en cas d'erreur. La fonction est disponible depuis la version 4.0.1. L'utilisation de cette fonction ignore totalement l'effet de la fonction error_reporting() . Pour cela, vous devrez placer dans vos scripts la fonction set_error_handler() . Si vous souhaitez appeler une fonction, dans ce cas, vous devrez utiliser la syntaxe suivante : set_error_handler ( 'my_error_handler' ) ; Pour l'appel d'une méthode, vous devrez procéder ainsi (possible uniquement depuis la version 4.3.0) : set_error_handler ( array ( 'MyErrorHandler' , 'trigger' ) ) ; Le premier élément dans le tableau est le nom de la classe et le second est le nom de la méthode qui doit être appelée. Ce n'est pas tout. En effet, votre fonction ou votre méthode doit désormais recevoir au minimum deux paramètres. Il s'agit du code de l'erreur, ainsi que du message d'erreur. Depuis la version 4.0.2, votre fonction ou votre méthode de gestion d'erreurs peut contenir trois autres arguments qui sont le fichier où a eu lieu l'erreur, la ligne dans le fichier et pour finir le contexte. Le contexte est un tableau qui contient des données sur les variables d'environnement et la méthode d'appel du script qui vous permettra de débugger plus aisément. Votre gestionnaire d'erreur aura la possibilité de renvoyer un booléen ou bien même de tuer l'exécution du script. Si vous renvoyez false , alors l'erreur s'affichera sur la page et le script poursuivra son exécution. Si vous renvoyez true , alors l'erreur ne s'affichera pas, et le script poursuivra son exécution. Si vous utilisez die() ou exit() , alors l'exécution du script s'arrêtera instantanément. J'estime que ce sera la méthode à utiliser dans la majorité des cas. Quelles sont les limites de set_error_handler() ? Cette fonction n'est malheureusement pas capable de gérer toutes les erreurs ! Cela signifie que vous serez tout de même dans l'incapacité de gérer les erreurs ci-dessous : E_ERROR E_PARSE E_CORE_ERROR E_CORE_WARNING E_COMPILE_ERROR E_COMPILE_WARNING Et la plupart des E_STRICT Vous pouvez consulter la liste des erreurs pouvant être provoquées par PHP . Vous pouvez aussi consulter la liste des fonctions sur la gestion des erreurs en PHP . Depuis PHP5, set_error_handler() accepte un second argument optionnel, qui permet de filtrer les erreurs à gérer. Ainsi vous pourrez indiquer la constante E_ALL ou E_STRICT . Si rien n'est spécifié, la fonction spécifiée sera appelée pour toutes les erreurs. Pour finir en beauté, je vous propose un script PHP afin de tester la gestion d'erreurs. Le script est directement pompé de la documentation de PHP. <?php // Gestionnaire d'erreurs function myErrorHandler ( $errno , $errstr , $errfile , $errline ) { switch ( $errno ) { case E_USER_ERROR : echo " Mon ERREUR [ $errno ] $errstr \n " ; echo " Erreur fatale sur la ligne $errline dans le fichier $errfile " ; echo ", PHP " . PHP_VERSION . " (" . PHP_OS . ") \n " ; echo "Arrêt... \n " ; exit ( 1 ) ; break ; case E_USER_WARNING : echo " Mon ALERTE [ $errno ] $errstr \n " ; break ; case E_USER_NOTICE : echo " Mon AVERTISSEMENT [ $errno ] $errstr \n " ; break ; default : echo "Type d'erreur inconnu : [ $errno ] $errstr \n " ; break ; } /* Ne pas exécuter le gestionnaire interne de PHP */ return true ; } // Fonction pour tester la gestion d'erreurs function scale_by_log ( $vect , $scale ) { if ( ! is_numeric ( $scale ) || $scale <= 0 ) { trigger_error ( "log(x) for x <= 0 is undefined, you used: scale = $scale " , E_USER_ERROR ) ; } if ( ! is_array ( $vect ) ) { trigger_error ( "Type d'entrée incorrect, tableau de valeurs attendu" , E_USER_WARNING ) ; return null ; } $temp = array ( ) ; foreach ( $vect as $pos => $value ) { if ( ! is_numeric ( $value ) ) { trigger_error ( "La valeur à la position $pos n'est pas un nombre, utilisation 0 (zéro)" , E_USER_NOTICE ) ; $value = 0 ; } $temp [ $pos ] = log ( $scale ) * $value ; } return $temp ; } // Configuration du gestionnaire d'erreurs $old_error_handler = set_error_handler ( "myErrorHandler" ) ; // Génération de quelques erreurs. Commençons par créer un tableau echo "vector a \n " ; $a = array ( 2 , 3 , "foo" , 5 . 5 , 43 . 3 , 21 . 11 ) ; print_r ( $a ) ; // Générons maintenant un second tableau echo "---- \n vector b - a notice (b = log(PI) * a) \n " ; /* Valeur à la position $pos n'est pas un nombre, utilisation de 0 (zéro) */ $b = scale_by_log ( $a , M_PI ) ; print_r ( $b ) ; // Ceci est un problème, nous avons utilisé une chaîne au lieu d'un tableau echo "---- \n vector c - a warning \n " ; /* Type d'entrée incorrect, tableau de valeurs attendu */ $c = scale_by_log ( "non un tablau" , 2 . 3 ) ; var_dump ( $c ) ; // NULL // Ceci est une erreur critique : le logarithme de zéro ou d'un nombre négatif est indéfini echo "---- \n vector d - fatal error \n " ; /* log(x) pour x <= 0 est indéfini, vous utilisez : scale = $scale" */ $d = scale_by_log ( $a , - 2 . 5 ) ; var_dump ( $d ) ; // Jamais atteint ?> Maintenant vous pouvez laisser libre court à vos besoins en créant par exemple un fichier de log d'erreur, ou bien même un envoi d'email d'alerte en cas d'erreur.
Derniers articles publiés sur le blog
Installer un certificat Gandi SSL Standard sur Nginx
Ajouté le 24-12-2010, via Informat'Hic, dans High-Tech & Internet
Depuis que j'ai migré mon serveur Web sous Nginx, j'ai eu quelques soucis avec mon certificat SSL Gandi Standard. Le certificat n'était pas accepté par Mozilla Firefox ainsi que les par Wget ou bien même cURL. En passant une option à cURL et Wget, il était assez simple de passer outre le...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Du boulot en veux-tu ? En voilà !
Ajouté le 15-12-2010, via Informat'Hic, dans High-Tech & Internet
Vous recherchez du boulot sur Paris, ce billet est pour vous ! Il n'est cependant pas destiné uniquement aux WebDeveloper. Lisez la suite. Sensio , agence interactive de l'année, recherche activement de nombreux postes dus à sa croissance. Pour cela, voici les différents postes disponibles :...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Comment utiliser les Fixtures avec Doctrine2 & Symfony2
Ajouté le 12-12-2010, via Informat'Hic, dans High-Tech & Internet
Ça fait maintenant un bon mois que je développe Apercite avec Symfony2 . En réalité, je devrais dire que jusqu'à présent j'ai avancé à petit pas, car c'est un nouveau framework, encore en cours de développement et sa documentation n'est pas forcément très exhaustive. C'est pour cela que...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Les bons liens pour apprendre à dessiner en HTML 5
Ajouté le 25-07-2010, via Informat'Hic, dans High-Tech & Internet
Entre le travail et le déménagement, voici la suite logique de mon précédent article sur HTML 5, où je vais vous montrer une de mes réalisations de dessin en HTML 5. Voici une sélection de liens ainsi qu'un exemple que j'ai réalisé moi-même et dont je suis assez fier pour une première...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Les bons liens pour apprendre à dessiner en HTML 5
Ajouté le 25-07-2010, via Informat'Hic, dans High-Tech & Internet
Entre le travail et le déménagement, voici la suite logique de mon précédent article sur HTML 5, où je vais vous montrer une de mes réalisations de dessin en HTML 5. Voici une sélection de liens ainsi qu'un exemple que j'ai réalisé moi-même et dont je suis assez fier pour une première...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Les nouveautés apportées par HTML 5
Ajouté le 19-07-2010, via Informat'Hic, dans High-Tech & Internet
Cela fait un bon petit moment que vous l'entendez raisonner sans pour autant savoir tout ce qu'il se cache derrière. Connaissez-vous le lot de nouveautés qu'apporte HTML 5 dans la structure de vos pages ? Savez-vous ce qui est déprécié en HTML 5 ? Vous avez sûrement entendu parlé de la...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
How to use sfValidatorDate : Utilisation des classes sfValidatorDate et sfValidatorDateTime de Symfony
Ajouté le 18-07-2010, via Informat'Hic, dans High-Tech & Internet
Je dois avouer que chaque jour que je passe au travail c'est toujours pleins de nouvelles choses que je comprend désormais (surtout sur Symfony). Symfony est un framework MVC complet mais qui fait de lui une bête assez complexe à appréhender. Par ailleurs, je me suis retrouvé face au mur...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Mars, et ça repart
Ajouté le 17-07-2010, via Informat'Hic, dans High-Tech & Internet
Vous l'avez surement remarqué mais ses derniers temps c'est un peu le grand vide sur ce blog. Il y a plusieurs raisons. La première c'est que tenir un rythme soutenu est fatiguant quand à côté on a le boulot, les obligations personnelles, etc. La seconde c'est que courir après l'actu Geek,...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Neuf euros pour activer l'iPhone 4
Ajouté le 07-07-2010, via Informat'Hic, dans High-Tech & Internet
J'ai acheté mon iPhone 4 chez Orange en fin de mois de juin et je peux le dire, c'est un très beau mobile. Par ailleurs, je peux téléphoner, utiliser mon forfait Data depuis hier et enfin je vis. Pour les détracteur, je vis non pas parce que j'ai un iPhone mais simplement parce que mon...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
Désactiver le ciblage des pubs Apple iAd
Ajouté le 01-07-2010, via Informat'Hic, dans High-Tech & Internet
Si comme moi, l'odeur de l' iPhone 4 se fait sentir, sachez que la de dernière mouture de l'iOS à savoir sa version 4, Apple a mit en place dans ses conditions générales l'affichage de pub via son service iAd. iAd permet de cibler les utilisateurs avec les cookies et d'autres technologies afin...
Ajouter un commentaire | Lier avec un autre article | Fiche de l'article
