IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage PHP Discussion :

Gestionnaire d'erreurs personnalisé


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Points : 65
    Points
    65
    Par défaut Gestionnaire d'erreurs personnalisé
    Bonjour,

    Je souhaite mettre un gestionnaire d'erreurs personnalisé en place, et je bloque sur certains points...

    Par soucis de simplicité, j'ai simplifié mon code, qui normalement ajoute les données dans une base (cette partie fonctionne).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    <?php  
    function GestionErreur($code, $msg, $file, $line) 
    {	
    $heureBug = date("h:i:s");
    $urlbug = $_SERVER['SCRIPT_URI'];
     
    $verifErreur = mysql_query('SELECT id FROM GestionErreurs WHERE lien="'.$urlbug.'" AND fichier="'.$file.'" AND ligne="'.$line.'"');
     
    if($errno == 'E_NOTICE' || $errno == 'E_USER_NOTICE')
    { 
    $Niveau = 'Basse'; 
    echo"basse";
    }
    if($errno == 'E_ERROR' || $errno == 'E_CORE_ERROR' || $errno == 'E_COMPILE_ERROR' || $errno == 'E_USER_ERROR')
    { 
    $Niveau = 'Haute'; 
    echo"haut";
    }
    if($errno == 'E_WARNING' || $errno == 'E_PARSE' || $errno == 'E_CORE_WARNING' || $errno == 'E_COMPILE_WARNING' || $errno == 'E_USER_WARNING')
    { 
    $Niveau = 'Moyenne'; 
    echo"moyenne"; 
    }
    if($Niveau == '')
    { 
    $Niveau = 'Inconnu'; 
    echo"inconnu"; 
    }
     
    echo'Priorité:'.$Niveau;
     
        // Arret execution du script
        die();
    }
     
    // On définit notre gestionnaire d'erreur personnalisé
    set_error_handler('GestionErreur');
    ?>
    Le problème rencontré est celui de définir le niveau d'alerte pour le bug.

    Par exemple, j'ai généré volontairement une erreur E_USER_NOTICE:
    "Undefined index:nomSiteJeux", ou indiqué une variable n'existant pas..et cela m'indique tout le temps: Priorité Inconnu! ...Alors qu'a priori ce serait "Basse".
    De plus, si j'oubli par exemple un point virgule, cela me renvoie:
    Parse error: syntax error, unexpected T_VARIABLE in /home/www/503c69a9a240068c8059ec652aefc53b/web/liste-des-jeux.php on line 115
    Pourtant en début de page j'ai mis error_reporting(0); ! Pourquoi me renvoie t-il l'erreur? S'agit t'il d'un autre type d'erreur?

    Merci

  2. #2
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    $errno n'est pas défini dans ta fonction.

    Pour le problème d'affichage, il faut lire la documentation :
    Il faut se rappeler que la fonction standard de traitement des erreurs de PHP est alors complètement ignorée. error_reporting() n'aura plus d'effet, et votre fonction de gestion des erreurs sera toujours appelée.

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 152
    Points : 65
    Points
    65
    Par défaut
    Merci Sabotage pour ta contribution

    En effet, j'avais fait une petite erreur de frappe...

    Voici mon nouveau code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
     
    <?php
    function GestionErreur($errno, $msg, $file, $line) 
    {	
       $heureBug = date("h:i:s");
       $urlbug = $_SERVER['SCRIPT_URI'];
     
        //Si l'erreur est juste du type "Notice" (avertissement)
        if($errno == '8' || $errno == '1024')
         { 
          $Niveau = 'Basse'; 
         }
     
        //Sinon, si l'erreur est moindre, mais assez importante tout de même 
        elseif($errno == '2' || $errno == '4' || $errno == '32' || $errno == '128' || $errno == '512')
         { 
          $Niveau = 'Moyenne'; 
         }
     
        //Sinon si l'erreur est assez importante et nécessite l'arrêt du script : 
        elseif($errno == '1' || $errno == '16' || $errno == '64' || $errno == '256')
         { 
          $Niveau = 'Haute'; 
         }
     
        //Dans tous les autres cas de figure
        else
         { 
          $Niveau = 'Inconnu'; 
         }
     
        //Insertion des données dans la base... 
     
        // Arret execution du script et redirection vers la page d'erreurs
        die(header('Location: erreur.php'));	
    }
     
    // On définit notre gestionnaire d'erreur personnalisé
    set_error_handler('GestionErreur');
     
    //...reste de la page
    ?>
    Le code marche correctement maintenant, mais il y a une dernière chose que je ne comprends pas. En effet, si je fais appel à une variable qui n'existe pas, cela me redirige bien vers la page d'erreur et ajoute une entrée dans la base en priorité basse.

    Par contre si maintenant j'inclus un fichier qui n'existe pas, cela m'indique sur la page:

    You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'function.include'>function.include]: failed to open stream: No such file or ' at line 1
    et cela n'est donc visiblement pas géré par mon script.

    J'ai vu dans la doc:

    Les types d'erreur suivants ne peuvent pas être gérés avec cette fonction : E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING ainsi que la plupart des E_STRICT d'un fichier lorsque set_error_handler() est appelé.
    Je suppose que l'inclusion d'une page non existante fait partie d'une de ces fonctions.

    Est il possible de faire en sorte qu'aucun message d'erreur ne s'affiche pour le visiteur?

    merci

  4. #4
    Modérateur
    Avatar de sabotage
    Homme Profil pro
    Inscrit en
    Juillet 2005
    Messages
    29 208
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations forums :
    Inscription : Juillet 2005
    Messages : 29 208
    Points : 44 155
    Points
    44 155
    Par défaut
    Essai de jouer avec display_errors.
    Peut etre qu'il n'agit pas sur la fonction utilisateur.

Discussions similaires

  1. gestionnaire d'erreur et fatal_error
    Par beberem dans le forum Langage
    Réponses: 6
    Dernier message: 26/12/2007, 21h49
  2. Réponses: 2
    Dernier message: 11/02/2007, 13h11
  3. IIS message d'erreur personnalisé
    Par topolino dans le forum Autres Logiciels
    Réponses: 2
    Dernier message: 18/05/2006, 20h52
  4. Gestionnaire d'erreurs
    Par rvzip64 dans le forum Langage
    Réponses: 6
    Dernier message: 04/11/2004, 15h18

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo