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 :

Intercepter les erreurs fatales [PHP 5.3]


Sujet :

Langage PHP

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut Intercepter les erreurs fatales
    Hello,

    Est-ce que vous avez un moyen de trapper les fatal error ?

    Tout ce qui est error, warning, notice est effectivement trappable via un handler d'erreur mais pour les fatal error, je coince.

    Pour info, le display_error à Off ne me satisfait pas car n'a un impact que sur l'affichage ou non de l'erreur alors que je souhaite trapper la fatal errror?

    Une idée ?

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut
    je ne pense pas que cela soit possible... un fatal erreur est du à une erreur d'écriture du code.. donc comment lancer ton programme si il possède des erreurs..


    Tu peux avoir la derniere erreur/warning/notice via:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <?php
    	$Terror=error_get_last();
    	if(isset($Terror['message']))
    	{
    		echo "Type d'erreur: ".$Terror['type'] ." <br>";
    		echo "Message: ".$Terror['message'] ." <br>";
    		echo "A la ligne: ".$Terror['line'] .", dans le fichier: ".$Terror['file'] ." <br>";
    	}
    	else
    		echo "Apache: Pas d'erreur<br>";	
    ?>

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut
    Merci pour ta réponse mais c'est les fatal error qui m'intéressent.
    Effectivement, en général c'est du à une erreur d'écriture du code mais ça peut aussi être un timeout de connexion à une ressource (db, filesystem)... Et c'est ce genre de choses que je souhaite trapper.

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Août 2006
    Messages
    72
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 72
    Points : 66
    Points
    66
    Par défaut
    Citation Envoyé par kaboume Voir le message
    Merci pour ta réponse mais c'est les fatal error qui m'intéressent.
    Effectivement, en général c'est du à une erreur d'écriture du code mais ça peut aussi être un timeout de connexion à une ressource (db, filesystem)... Et c'est ce genre de choses que je souhaite trapper.

    si tu as un timeout de connexion à une ressource telle qu'une base de donnée. Alors ses la fonction elle même qui te retournera une erreur..

    si c'est une défaillance matériel, telle que le disque dur.. ce n'est pas au programme de détecter cela.

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut
    1/ C'est un timeout d'exécution de la requête qui sort en fatal error (et non pas de connexion)
    2/ c'est un peu plus compliqué que cela avec l'accès à une base sqlite à travers un montage samba qui peut ne pas fonctionner nickel.

    Merci quand même

  6. #6
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    16/10 -> 24/10, ça va, je déterre pas trop.

    Toutefois, autant le faire. J'ai exactement le même questionnement...

    Bon, d'accord, on arrive pas à "capturer" une fatal error. Réellement ?! Parce qu'en fait, même si il s'agit d'une erreur de code interne (par exemple, dans mon cas, une méthode absente), j'aimerais toutefois que l'utilisateur ne voit pas un mais bien une erreur stylisée.

    Vous me direz, ça lui fait une belle jambe à lui, il sait quand même pas naviguer sur son site chéri mais... si on ne sait pas capturer une erreur de ce type, on ne sait donc pas la loguer et/ou en avertir le webmaster, si ?

    Merci d'avance !

  7. #7
    Membre chevronné Avatar de nosferapti
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    1 157
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 157
    Points : 1 895
    Points
    1 895
    Par défaut
    Citation Envoyé par Klyne2 Voir le message
    Bon, d'accord, on arrive pas à "capturer" une fatal error. Réellement ?! Parce qu'en fait, même si il s'agit d'une erreur de code interne (par exemple, dans mon cas, une méthode absente), j'aimerais toutefois que l'utilisateur ne voit pas un mais bien une erreur stylisée.
    la réponse a déjà été donnée au début de la discussion, ces erreurs sont seulement lancées quand il y a une erreur dans le code avant que le code soit lancé donc ce même code ne peut pas gérer cette erreur

    pour vérifier que tous les fichiers PHP d'un répertoire sont corrects, vous pouvez lancer cette commande sur un serveur Linux :
    Code x : Sélectionner tout - Visualiser dans une fenêtre à part
    find . -name "*.php" -exec php -l {} \;

  8. #8
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Je me doute que c'est impossible à capturer, puisqu'il s'agit d'une erreur fatale, évidemment. Seulement, par exemple, lorsqu'il manque une méthode à l'une de mes classes, mais que la fonction et le system_handler sont bel et bien fonctionnel, j'aurais pu espérer que ça soit pris en compte.

    Car en réalité, même si c'est en dev que ces erreurs sont affichées et que seule la fatal error doit être affichée en production, j'aurais aimé prévenir le webmaster (ou plutôt le gestionnaire du site, devrais-je dire) d'une erreur survenue.

    Tant pis,

    Mais je pense que dans mon cas, je peux toujours gérer un contrôleur de base qui vérifie l'existence des fonctions, des classes et des méthodes, afin de générer moi-même la fameuse fatal error (du moment où elle n'intervient pas dans le contrôleur). Mais j'ai peur que cela prenne du temps, beaucoup de temps.

    Merci quand même !

  9. #9
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut
    Bonjour,

    Pour info, j'ai trouvé la solution : http://www.ericmery.fr/blog/php-gest...r-fatal-error/

    A+

  10. #10
    Membre régulier

    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2009
    Messages
    99
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Janvier 2009
    Messages : 99
    Points : 115
    Points
    115
    Par défaut
    Ce gestionnaire d’erreur permet de trapper toutes les erreurs à l’exception des fatal error.
    Donc, la solution n'est pas là. Mais ce n'est plus un soucis, je ne recherche pas la solution à l'heure actuelle.

  11. #11
    Membre habitué
    Profil pro
    Inscrit en
    Juin 2004
    Messages
    306
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juin 2004
    Messages : 306
    Points : 194
    Points
    194
    Par défaut
    Tu as lu un peu trop rapidement l'article... La solution est bien là :

    Pour les fatal error, il faut se faire aider de la fonction register_shutdown_function qui a pour effet d’enregistrer une fonction qui sera appelée à l’extinction du script php. Ainsi en cas de fatal error, le script sera prématurément arrêté et la fonction enregistrée par register_shutdown_function sera appelée.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    register_shutdown_function('shutdownFunction');
    function shutDownFunction() {
        $error = error_get_last();
        if ($error['type'] == 1) {
            // log
            // redirection vers la page d'erreur
        }
    }

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Code Igniter Intercepter les erreurs lors des requêtes vers bases de données
    Par ilalaina dans le forum Bibliothèques et frameworks
    Réponses: 2
    Dernier message: 06/10/2009, 07h52
  2. [PHP 5.2] Logger les erreurs fatales sans les afficher
    Par max-mag dans le forum Langage
    Réponses: 3
    Dernier message: 15/05/2009, 12h00
  3. Intercepter les erreurs de "socket_connect"
    Par mnemonic78 dans le forum Langage
    Réponses: 2
    Dernier message: 08/11/2008, 04h10
  4. intercepter les erreurs
    Par agrotic dans le forum ASP
    Réponses: 2
    Dernier message: 15/02/2008, 14h03
  5. Intercepter les erreurs d'une commande ?
    Par Olivier Regnier dans le forum Linux
    Réponses: 2
    Dernier message: 01/12/2006, 12h28

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