[PHP] Gestion des erreurs
- /10
1) Introduction
Bonjour

La gestion des erreurs en PHP consiste à récupérer les éventuelles erreurs produites par vos différents scripts PHP afin de les stocker dans un fichier ou dans une base de données. Cette pratique est vous permet de corriger et éviter des éventuelles erreurs ou failles de sécurité qui pourraient être exploitées par une personne malveillante.
Dans ce tutorial, nous choisirons un fichier texte, pour logger les différentes erreurs.
2) Pratique
Afin de récupérer les erreurs produites par le script PHP, vous devez indiquer la ligne suivante :
<?php error_reporting(E_ALL); ?>
Dans cet exemple, nous avons définit E_ALL en paramètre, ce qui signifie que tous les types d'erreurs seront récupérés. La liste complète des différents types d'erreur est disponible ici.
La fonction qui permettra de récupérer les erreurs devra définir le type d'erreur rencontré ainsi que sauvegarder les valeurs des tableaux $_POST, $_GET, $_SESSION, $_COOKIE, et éventuellement $_SERVEUR. L'adresse IP de l'utilisateur peut également être utile si nous voulons lui interdire l'accès à telle ou telle fonctionnalité. L'erreur ainsi traitée sera finalement enregistré dans un fichier texte.
Il faut aussi penser à indiquer a PHP quelle fonction se chargera de gérer les erreurs :
<?php set_error_handler('recuperer_erreur'); ?>
Voici donc un premier exemple :
<?php
/* $errno : type de l'erreur
$errstr : message d'erreur
$errfile : fichier correspondant à l'erreur
$errline : ligne correspondante à l'erreur */
function recuperer_erreur($errno,$errstr,$errfile,$errline)
{
// On définit le type de l'erreur
switch($errno)
{
case E_USER_ERROR :
$type = "Fatal:";
break;
case E_USER_WARNING :
$type = "Erreur:";
break;
case E_USER_NOTICE :
$type = "Warning:";
break;
case E_ERROR :
$type = "Fatal";
break;
case E_WARNING :
$type = "Erreur:";
break;
case E_NOTICE :
$type = "Warning:";
break;
default :
$type = "Inconnu:";
break;
}
// On définit l'erreur.
$erreur = $type."Message d'erreur : [".$errno."]".$errstr.
"Ligne :".$errline." Fichier :".$errfile;
/* Pour passer les valeurs des différents tableaux, nous utilisons la fonction serialize()
Le rapport d'erreur contient le type de l'erreur, la date, l'ip, et les tableaux. */
$info = date("d/m/Y H:i:s",time()).
":".$_SERVER['REMOTE_ADDR'].
"GET:".serialize($_GET).
"POST:".serialize($_POST).
"SERVER:".serialize($_SERVER).
"COOKIE:".(isset($_COOKIE)? serialize($_COOKIE) : "Undefined").
"SESSION:".(isset($_SESSION)? serialize($_SESSION) : "Undefined");
// On ouvre le fichier
$handle = fopen("log.txt", "a");
// On écrit $erreur et $info
if ($handle)
fwrite($handle,$erreur.$info);
else echo"Erreur d'ouverture du fichier.";
fclose($handle);
}
?>
Vous pouvez bien sûr utiliser MySQL, tout simple en stockant les différentes variables dans une table, ce qui vous permettrait alors de concevoir un petit script de gestion des logs plus élaboré
« Trouve un travail qui te plaît et plus jamais tu ne travailleras » Confucius
Commentaires
Pas de commentaires
Vous devez vous identifier pour pouvoir poster des commentaires.





