BleuOrangeVert

[PHP] Gestion des erreurs

- /10

1) Introduction


Bonjour chat.gif
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é clindoeil.gif
Par Worm Imprimer le tutorial Voir son profil Envoyer un message privé
« 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.