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 :

Gestion du rapport d'erreur php


Sujet :

Langage PHP

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut Gestion du rapport d'erreur php
    Bonjour,

    Je m'occupe d'un site en php dont toutes les pages font appel à un fichier toto.php à l'aide de la fonction include.

    Mon rapport d'erreur me signale une erreur dans le fichier toto.php mais j'aimerais savoir quelle était l'url dans la barre d'adresse ou le nom du fichier appelé en 1er ,lorsque l'erreur s'est produite sans quoi je ne peux rien faire.

    Peux on inclure une variable comme $_SERVER['PHP_SELF'] dans le rapport d'erreur ?

    Merci d'avance

  2. #2
    Membre expert Avatar de Fench
    Homme Profil pro
    Chercheur en informatique
    Inscrit en
    Mai 2002
    Messages
    2 353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Groenland

    Informations professionnelles :
    Activité : Chercheur en informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Mai 2002
    Messages : 2 353
    Points : 3 390
    Points
    3 390
    Par défaut
    Bonsoir,

    Tu es sur quel navigateur ? Il existe des debugger ...

    Sinon bein dans le brut, tu fais un echo du nom du script avant l'include

    Sinon tu as la globale $_REQUEST dans je cherche
    Meuuh en AI à l'INRA
    Domaines: {java, php, js, jquery}{hibernate, doctrine}{MyLib, symfony, Zend}
    fait gagner du temps à ceux qui aident , donc un message avec la balise résolu laisse plus de temps pour résoudre d'autres problèmes (balise à cliquer en bas de l'écran)

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Je ne constate pas l'erreur dans mon navigateur mais dans le fichier log des erreurs php.

    Je ne peux reproduire cette erreur sans connaitre l'url à partir de la quelle elle se produit. C'est pourquoi je voudrais que le fichier log m'indique cette url et pas seulement le nom du fichier inclus dans lequel l'erreur se produit.

    Pour être plus précis, le site est entre autre composé d'une arborescence de plusieurs milliers de fichiers php structurés comme suit :


    <?php include 'debut.php';?>

    Contenu html

    <?php include 'fin.php';?>


    L'erreur se produit dans fin.php ou une fonction non définie a été appelé. Elle n'est probablement pas définie car le code <?php include 'debut.php';?> est absent sur ce fichier

    Il me faut connaitre le nom du fichier php dans le fichier log

    Merci d'avance

  4. #4
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Salut

    On aura beaucoup de mal à t'aider dans la mesure où tu nous donne pas assez d'infos.
    On ne peu pas deviner.

    Tu dis voir une erreur dans un fichier de log.
    A aucun moment tu dis dans quel fichier log (Apache, Php, etc ...), tu ne post même pas le contenu de cette erreur.
    Comment veux tu qu'on te donne ne serait-ce qu'une piste si on ne sait même pas quelle est erreur ?

    D'un coté, tu dis que cette erreur se trouverait dans fin.php, donc tu saurais d'où serait l'origine de cette erreur.
    De l'autre tu dis ne pas pouvoir (re)provoquer cette erreur.
    J'ai tendance à penser que c'est un peu contradictoire.


    Par ailleurs, tu dis que ce serait probablement une non déclaration d'une fonction.
    Sur quoi te base tu pour déduire cela ?
    Là encore ça pourrait nous aider à mieux comprendre ton problème.

    Connais-tu quelle serait cette fonction non déclarée (ou incluse) ?
    Si ton but est de rechercher dans quel fichier serait cette fonction (en supposant que tu connaisse au moins son nom), essai de faire une recherche au niveau de ton éditeur de code (genre NetBeans, etc ...).

    Ensuite, une fois avoir repéré le fichier où cette fonction est créé/déclarée, ne serait-ce provisoirement, tu pourrais la recréer/(re)déclarer dans debut.php mais en rajoutant une alternative avec la fonction function_exists(), histoire de ne pas provoquer l'erreur inverse, soit une double déclaration.
    Cela pour voir si l'erreur que tu as est bien dû à cette fonction non déclarée.


    Tout cela sauf erreur, et si ça peu aider.
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  5. #5
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    D'abord merci de passer du temps à essayer de me répondre et désolé si mon exposé initial était incomplet mais je suis un noob surtout en débogage !

    Le rapport d'erreur c'est bien celui de PHP et non pas celui du serveur web, IIS en l'occurence.

    le message d'erreur c'est PHP Fatal error: Call to undefined function myfunction() in fin.php on line 37.

    Je sais que cette fonction est déclarée dans un fichier lui même inclus dans debut.php

    Je sais aussi que j'ai déjà réparé cette erreur en identifiant des fichiers de mon arbo ou le code <?php include 'debut.php';?> était absent.

    Je ne peux pas reproduire cette erreur dans le mesure
    - ou il faudrait que je teste des milliers de fichiers de l'arborescence
    - je n'arrive plus à identifier les fichiers de mon arbo ou le code <?php include 'debut.php';?> est absent


    Je voudrais bien rendre le rapport d'erreur PHP plus bavard. Je pourrais aisément solutionner mon problème si celui ci m'indiquait par exemple la valeur de la variable $_SERVER['PHP_SELF'] au moment ou s'est produit l'erreur.Ce qui était le sens de ma question initiale

  6. #6
    Membre expert Avatar de RunCodePhp
    Profil pro
    Inscrit en
    Janvier 2010
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Localisation : Réunion

    Informations forums :
    Inscription : Janvier 2010
    Messages : 2 962
    Points : 3 947
    Points
    3 947
    Par défaut
    Je sais aussi que j'ai déjà réparé cette erreur en identifiant des fichiers de mon arbo ou le code <?php include 'debut.php';?> était absent.
    Si je comprends bien, le problème est résolu.

    Je voudrais bien rendre le rapport d'erreur PHP plus bavard. Je pourrais aisément solutionner mon problème si celui ci m'indiquait par exemple la valeur de la variable $_SERVER['PHP_SELF'] au moment ou s'est produit l'erreur.Ce qui était le sens de ma question initiale
    Ce que tu évoque c'est bien de la gestion des erreurs.
    Mais faire cela efficacement c'est complexe, en plus on peu dire que chaque codeur aura sa propre façon de faire selon le but recherché, sans compter que la décision peu encore varier selon chaque type d'erreur.
    On est pas loin du cas par cas.
    Du coup c'est franchement compliqué à expliquer.


    Regarde du coté de la doc concernant les Exceptions.


    A la base le principe est simple : On estime qu'une partie (même une ligne) de code serait à risque (bug possible).
    Après ça il y a les conséquences si le bug se produit.
    La vrai question à se poser c'est : Que faire dans se cas là ?

    Se contenter d'envoyer un simple message dans un log, même avec un gros paquet d'informations, est-ce suffisant ?
    Pas toujours efficace dans la mesure où le bug risque fort d'en créer d'autres en cascades.
    Les utilisateurs eux seront en face d'une application toujours boguée.


    Et bien le principe est d'entourer cette partie de code à risque par un try/catch, c'est à dire d'attraper l'erreur lorsqu'elle aura lieu et de faire autrement, du moins on gère l'erreur.
    Exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    <?php
    try {
        // Appel à myfunction() non déclarée
        myfunction();
    }
    catch (Exception $e) {
        // On fait autrement / ou gestion de l'erreur
    }
    ?>
    Ici, dans la gestion de l'erreur on a tout le loisir d'enregistrer dans le log des erreurs notre propre message d'erreur (ou un complément de celui qu'on obtiendra par $e->getMessage() par exemple) en y mettant par exemple la valeur de $_SERVER['PHP_SELF'].

    Il va sans dire qu'il faudra tout faire pour éviter de provoquer un autre erreur dans sa propre gestion des erreurs.
    Le comble d'une gestion des erreurs c'est quelle soit elle même boguée


    C'est un gros résumé, à chacun de personnaliser tout ça
    Win XP | WampServer 2.2d | Apache 2.2.21 | Php 5.3.10 | MySQL 5.5.20
    Si debugger, c'est supprimer des bugs, alors programmer ne peut être que les ajouter [Edsger Dijkstra]

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 29
    Points : 22
    Points
    22
    Par défaut
    Merci je crois que le try/catch associé à la commande errog_log devrait me permettre de solutionner mon problème

    Je vais tenter quelque chose ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    <?php
    try {
        // Appel à myfunction() non déclarée
        myfunction();
    }
    catch (Exception $e) {
        error_log("myfunction appelé dans le fichier".$_SERVER['PHP_SELF'], 1,
      "email@nomdedomaine.com");
    }
    ?>
    Merci beaucoup je teste ça lundi

Discussions similaires

  1. [AC-2003] Gestion des erreurs - Rapport d'erreurs sous access
    Par mbellemax dans le forum VBA Access
    Réponses: 5
    Dernier message: 13/10/2009, 10h46
  2. Zend_Log et gestion des erreurs PHP
    Par Robule31 dans le forum Autres composants
    Réponses: 2
    Dernier message: 11/09/2009, 11h17
  3. gestion personnaliser des erreurs PHP
    Par pascalbout1 dans le forum Langage
    Réponses: 2
    Dernier message: 10/12/2007, 16h39
  4. [servlet] gestion des listes d'erreurs ?
    Par MatMeuh dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 27/10/2004, 10h19
  5. Personnaliser un rapport d'erreur sous Windows XP
    Par Neilos dans le forum Windows
    Réponses: 5
    Dernier message: 21/11/2003, 18h13

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