Gestion d'erreurs

Gestion d'erreurs - PHP - Programmation

Marsh Posté le 19-03-2007 à 20:26:08    

Bonjour,
 
Une petite question aux spécialistes : Je développe un site sans aucune prétention en php/MySQL.  
Je voudrais faire une gestion des erreurs assez efficace, c'est-à-dire éviter de voir apparaitre des erreurs PHP dans ma page quand tout va mal, ou du moins gérer les cas où ca plante.
 
En particulier, si ma requête mysql se vautre, j'ai essayé de gérer ca via un try/catch, mais ca ne fonctionne pas... (je suis sous php 5).
 
J'aimerais savoir comment les pros s'y prennent, si vous avez des conseils :)
 
Merci d'avance  :hello:

Reply

Marsh Posté le 19-03-2007 à 20:26:08   

Reply

Marsh Posté le 19-03-2007 à 21:55:15    

did-54 a écrit :

Bonjour,
 
Une petite question aux spécialistes : Je développe un site sans aucune prétention en php/MySQL.  
Je voudrais faire une gestion des erreurs assez efficace, c'est-à-dire éviter de voir apparaitre des erreurs PHP dans ma page quand tout va mal, ou du moins gérer les cas où ca plante.
 
En particulier, si ma requête mysql se vautre, j'ai essayé de gérer ca via un try/catch, mais ca ne fonctionne pas... (je suis sous php 5).
 
J'aimerais savoir comment les pros s'y prennent, si vous avez des conseils :)
 
Merci d'avance  :hello:


 
Car les fonction mysql_* ne génère pas d'exception. Il faut tester leur code de routeur et lancer l'exception en concéquence
Sinon, utilise PDO

Reply

Marsh Posté le 20-03-2007 à 02:39:36    

Pour cacher les erreurs tu met "@" devant ta variable ;)
Bien sûr ça ne résoud pas le bug, ça le cache juste ^^.

Reply

Marsh Posté le 20-03-2007 à 09:07:27    

et y'a aucun autre moyen ? (je parle du test de valeur de retour évidemment :) ) Je veux dire c'est LA best-practice ?


Message édité par did-54 le 20-03-2007 à 09:07:51
Reply

Marsh Posté le 20-03-2007 à 09:16:02    

tu peux te servir de mysql_error et mysql_errno  pour récupérer les codes d'erreur renvoyés par mysql

Reply

Marsh Posté le 20-03-2007 à 10:45:31    

Ben si tu veux pas que les warnings incongrus se voient, error_reporting(0) sur ton site publié/en prod. Tu peux te démerder pour faire un système qui loggue les éventuelles erreurs MySQL (mysql_error) dans un fichier par exemple, sans que ça les affiche au client. Tu peux aussi au passage te faire ton propre handler d'erreurs qui va logger de la même façon toute error/warning/notice (set_error_handler).
 
Par contre en dév, tu laisses error_reporting(E_ALL | E_STRICT) qui t'avertit directement de tout (et le faire plutôt dans php.ini directement, tant qu'à faire).
 
Le mieux reste de se faire sa propre classe (ou son propre jeu de fonctions au moins) qui gère tout ça, avec un flag booléen quelque part genre DEBUG qui permet de savoir si t'es en mode dév ou en mode prod.


Message édité par sielfried le 20-03-2007 à 10:45:56

---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar
Reply

Marsh Posté le 20-03-2007 à 10:54:32    

Pour moi ce qu'il faut faire :
 
utiliser des trigger_error, afin de pouvoir générer des erreurs à partir de défauts habituels exemple :  

Code :
  1. $this->db = mysql_select_db($config->database1, $this->connect)
  2.   or trigger_error ('Sélection de la base de données impossible '.mysql_error(), E_USER_WARNING);


 
Ensuite gérer les erreurs en direct quand le site est en phase de test, sinon gérer les erreurs via un log et/ou via l'envois d'email à l'admin en phase de production.
 

Code :
  1. /*
  2.  * Fonction de configuration de la gestion des erreurs
  3.  */
  4. function gestion_erreur($type_gestion) {
  5.  if ($type_gestion=1) {    //phase de test
  6.   error_reporting (E_ALL | E_STRICT);      //filtrage des erreurs reportées
  7.   ini_set('display_errors', true);      //affichage des erreurs
  8.   ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
  9.   ini_set('display_startup_errors',true);     //affichage des erreurs de démarrage
  10.   ini_set('log_errors', true);       //création d'un fichier de log
  11.   ini_set('error_log', 'journal/error.log');    //localisation du fichier de log
  12.   ini_set('error_prepend_string','<font color="red">'); //début mise en forme erreur
  13.   ini_set('error_append_string','</font>');    //fin mise en forme erreur
  14.   ini_set('ignore_repeated_errors', true);     //ignorer les erreurs répétées
  15.  }
  16.  elseif ($type_gestion=2) {   //phase de production avec fichier log externe
  17.   error_reporting (E_ALL);        //filtrage des erreurs reportées
  18.   ini_set('display_errors', false);      //affichage des erreurs
  19.   ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
  20.   ini_set('display_startup_errors',false);    //affichage des erreurs de démarrage
  21.   ini_set('log_errors', true);       //création d'un fichier de log
  22.   ini_set('error_log', 'journal/error.log');    //localisation du fichier de log
  23.   ini_set('error_prepend_string','<font color="red">'); //début mise en forme erreur
  24.   ini_set('error_append_string','</font>');    //fin mise en forme erreur
  25.   ini_set('ignore_repeated_errors', true);    //ignorer les erreurs répétées
  26.  }
  27.  else {        //phase de production avec journal système
  28.   error_reporting (E_ALL);        //filtrage des erreurs reportées
  29.   ini_set('display_errors', false);      //affichage des erreurs
  30.   ini_set('html_errors', false);       //désactivation des liens html dans les erreurs
  31.   ini_set('display_startup_errors',false);    //affichage des erreurs de démarrage
  32.   ini_set('log_errors', false);
  33.  }
  34. }


 
vla une fonction qu eje me suis fait, et que j'utilise pour configurer la gestion des erreurs.
 
Note : J'utilise aussi les PDO donc je récupére les exceptions via try / catch, et je les renvois vers l'utilisateur avec un trigger_error.  
Je ne sais pas si c'est l'idéal, mais c'est comme ça que je fait :D

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed