Blogonet » Blogs » Informat'Hic

RSS Informat'Hic - Fiche du blog

Signaler

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.

Top Blogs Top Blogs


Derniers articles publiés sur le blog

Résultat du concours pour gagner 3 noms de domaine

Ajouté il y a 1 jour, via Informat'Hic, dans High-Tech & Internet

Le tirage au sort a été effectué par le monstre Random.org . Les 3 gagnants sont les commentaires 9 (Nark0z), 10 (Harcher81) et 14 (ding7). Les gagnants vont donc recevoir un mail avec le code à fournir sur la page de commande de Gandi . Voici la vidéo du tirage au sort : Je remercie toutes...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Paris 26 Gigapixels : le plus grand panorama du monde

Ajouté il y a 1 jour, via Informat'Hic, dans High-Tech & Internet

C'est avec fierté — car j'ai travaillé sur le projet en tant que WebDeveloper pour la société Kolor — que je vous présente Paris 26 Gigapixels ! Il s'agit actuellement de la plus grosse image interactive du monde . Ce panorama réunit en une seule image 2346 photos assemblées par le...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Gagnez 3 noms de domaine !

Ajouté le 07-03-2010, via Informat'Hic, dans High-Tech & Internet

Grâce à Gandi , je vous propose de gagner 3 noms de domaine ! Il faut savoir que Gandi fête ses 10 ans . Ils offrent pour l'occasion 55 000 noms de domaine. J'ai réussi pour vous à avoir 3 bons que je vous propose de gagner grâce à cet article . Pour ça, rien de plus simple. Il vous suffit...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Doit-on inscrire son blog sur Paperblog ?

Ajouté le 07-03-2010, via Informat'Hic, dans High-Tech & Internet

Ayant inscrit Informat'Hic sur Paperblog, je me suis fait mon avis sur ce service. Cet article va permettre d'exposer mes idées avec mes argumentations. J'aurais peut-être tort sur certains points, je vous invite alors à me corriger. Paperblog est-il un voleur de contenu ? Ma réponse est oui et...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Ah Paris !

Ajouté le 06-03-2010, via Informat'Hic, dans High-Tech & Internet

Eh bien voilà, si je suis absent depuis un p'tit moment sur le blog c'est que je prépare ma venue à Paris . Je viens d'y trouver un nouveau travail qui va énormément me plaire ! A cette occasion, je recherche un appartement ou une colocation sur ou aux alentours de Clichy (8ème, 9ème,...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Le vendredi c'est permis ! #2

Ajouté le 26-02-2010, via Informat'Hic, dans High-Tech & Internet

Voici la seconde édition de Le vendredi c'est permis ! Comme pour la dernière et première édition , nous allons rester sur le thème de la musique. Je pense que vous connaissez quelques vidéos de la fameuse chanson Harder, better, faster, stronger de Daft Punk. Je vous propose dans cette...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Google condamné pour atteinte à la vie privée

Ajouté le 26-02-2010, via Informat'Hic, dans High-Tech & Internet

En lisant ce titre, on pourrait croire que Google vient de se prendre une claque à cause de son service Google Street View, ou bien même à cause de son moteur de recherche. Mais que nenni ! C'est l'Italie qui a poursuivi Google à la suite d'une vidéo posté sur le service Google Vidéo....

Ajouter un commentaire | 1 média lié | Fiche de l'article

Déployer une application symfony dans un cluster

Ajouté le 24-02-2010, via Informat'Hic, dans High-Tech & Internet

Lors du Symfony Live 2010 , j'ai pu assister à la conférence de Kris Wallsmith qui nous a présenté la possibilité de déployer une application symfony au sein d'un cluster . De plus, à la suite du commentaire de Quiche , je me suis engagé à faire cet article. Il est vrai qu'à première vu...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Revue de presse #5

Ajouté le 22-02-2010, via Informat'Hic, dans High-Tech & Internet

Nous revoilà parti pour une séance de lecture sur divers horizons. Aujourd'hui, je ferais un p'tit point spécial particulier sur Hadopi / Loppsi ainsi que symfony / Symfony . Nous reviendront ensuite sur des points plus divers et un peu plus geek pour votre plus grand bonheur. Hadopi &...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

J'ai testé pour vous ChatRoulette

Ajouté le 21-02-2010, via Informat'Hic, dans High-Tech & Internet

Vous avez sûrement entendu parler de ChatRoulette . Le principe de ce site est très simple vous partagez (ou pas) votre WebCam et / ou votre micro et un autre visiteur qui peut se trouver à l'autre bout du monde comme être votre voisin à accès à votre WebCam et votre micro. Vous pouvez dès...

Ajouter un commentaire | Lier avec un autre article | Fiche de l'article

Commentaires

Ils aiment ce blog

Aucun membre n'a ajouté ce blog à ses favoris