vendredi 18 janvier 2013

Gérer et prévoir les différentes erreurs PHP

Si vous effectuez un retour JSON et qu’une erreur PHP est affichée, jQuery ne pourra pas parser les données de retour et il vous affichera notre erreur « alert ». Cependant, il est quand même plus pratique d’éviter que ce type d’erreur ne survienne en gérant les erreurs de vos fonctions PHP.


Cacher et enregistrer les erreurs survenues


Cacher une erreur sans en tenir compte est assez risqué. Afin d’avoir un suivi de vos erreurs cachées, il est conseillé de les enregistrer quelque-part (par exemple en base de données). PHP dispose d’une fonction bien pratique appelée set_error_handler() qui vous permet de remplacer la fonction de gestion d’erreurs par défaut intégrée à PHP par la vôtre. Il vous suffit donc de créer une fonction qui enregistrera cette erreur en base de données au lieu de l’afficher.
Voici un exemple de fonction qui stocke les erreurs survenues dans une table :

  1. // Si vous utilisez encore les fonctions de MySQL  
  2. function sauvegarderErreurDB($errno$errmsg$filename$linenum$vars) {  
  3.    $sql = "INSERT INTO erreurs (date, numero, message, fichier, fichierLigne)"  
  4.    $sql .= " VALUES ";  
  5.    $sql .= " ( ";  
  6.    $sql .= "    '".date("Y-m-d H:i:s",time())."' ";  
  7.    $sql .= "   ,'".mysql_real_escape_string($errno)."' ";  
  8.    $sql .= "   ,'".mysql_real_escape_string($errmsg)."' ";  
  9.    $sql .= "   ,'".mysql_real_escape_string($filename)."' ";  
  10.    $sql .= "   ,'".mysql_real_escape_string($linenum)."' ";  
  11.    $sql .= " ) ";  
  12.    mysql_query($sql);  
  13. }  
  14. set_error_handler("sauvegarderErreurDB");  
  15.   
  16. // Si vous utilisez Pdo  
  17. function sauvegarderErreurDB($errno$errmsg$filename$linenum$vars) {  
  18.    $db = new PDO('mysql:host=<HOTE>;dbname=<NOMBDD>''<USER>''<PASSWORD>');  
  19.    $stmt = $db->prepare("INSERT INTO erreurs (date, numero, message, fichier, fichierLigne) VALUES (?, ?, ?, ?, ?);");  
  20.    $stmt->execute(array(date("Y-m-d H:i:s",time()), $errno$errmsg$filename$filenum));  
  21. }  
  22. set_error_handler("sauvegarderErreurDB");  
Structure de la table utilisée pour stocker les erreurs :

  1. CREATE TABLE IF NOT EXISTS `erreurs` (  
  2.    `idErreur` int(11) NOT NULL AUTO_INCREMENT,  
  3.    `date` datetime NOT NULL,  
  4.    `numero` smallint(6) NOT NULL,  
  5.    `message` varchar(255) NOT NULL,  
  6.    `fichier` varchar(255) NOT NULL,  
  7.    `fichierLigne` varchar(6) NOT NULL,  
  8.    PRIMARY KEY (`idErreur`)  
  9. );  

Aucun commentaire:

Enregistrer un commentaire