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 :

set_error_handler ne fonctionne pas


Sujet :

Langage PHP

  1. #1
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 467
    Par défaut set_error_handler ne fonctionne pas
    Bonjour,

    Avec php5, j'essaie de faire une gestion d'erreur personnalisée.
    Voici mon 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
    <?php
    //test de log erreurs
      error_reporting(0);
     
      function userErrorHandler()
      {
        die('ça plante');
      }
     
      set_error_handler("userErrorHandler");
     
      echo 'bof'
      echo 'buf'
     
    ?>
    Mais j'obtiens tout de même ceci le message d'erreur php au lieu de mon 'ça plante' :
    Parse error: syntax error, unexpected T_ECHO, expecting ',' ...
    Avez vous une idée du problème ?
    Merci de votre aide.

  2. #2
    Membre chevronné Avatar de Kennel sébastien
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 226
    Par défaut
    T'es pas en python ou ruby, il faut mettre un point-virgule à la fin de la ligne. Au niveau des echo

  3. #3
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 467
    Par défaut
    Oui, bien sûr, mais l'erreur est volontaire pour tester ma propre gestion des erreurs avec set_error_handler.
    C'est avec la gestion des erreurs que j'ai le problème, car l'erreur provoqué par les points-virgules manquants me retourne l'erreur php et non mon propre message.

  4. #4
    Membre chevronné Avatar de Kennel sébastien
    Homme Profil pro
    Développeur
    Inscrit en
    Septembre 2008
    Messages
    226
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Septembre 2008
    Messages : 226
    Par défaut
    Désoler, je suis vraiment à coter de la plaque ces deux dernier jours . En fait ta fonction ne gère pas ce type d'erreur... Si j'essai le code suivant:

    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
     
    <?php
        function userErrorHandler($errno, $errstr, $errfile, $errline)
        {
            die("<b>Erreur:</b> [$errno] $errstr<br />" .
                 " Erreur à la ligne $errline dans le fichier $errfile<br />");
        }
     
        set_error_handler("userErrorHandler");
     
        $teste = 2;
     
        if ($teste > 1) {
            trigger_error('ça plante');
        }
    ?>
    Ca fonctionne.

  5. #5
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Comme le précise la documentation, toutes les erreurs ne peuvent pas être interceptées (toutes celles qui sont fatales en fait restent à la charge de PHP) :
    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é.

  6. #6
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 467
    Par défaut
    Aïe, pas de solution pour gérer les erreurs ?

  7. #7
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 467
    Par défaut
    J'aimerai au moins pouvoir logger les erreurs, mais ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ini_set('log_errors', true);
      ini_set('error_log', "c:\\wamp\\www\\php-log.txt") ;
    a un comportement similaire, les erreurs fatales ne sont pas logguées

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2002
    Messages
    6 152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2002
    Messages : 6 152
    Par défaut
    Oui mais ce serait ici normal, puisque vous redéfinissez le journal d'erreur dans le script même où est situé l'erreur de syntaxe donc il ne pourra jamais être pris en compte.

    Il y a le fichier php.ini pour ça ou éventuellement par fichier .htaccess (php_value error_log "C:/wamp/www/php-log.txt") pour un contexte web (sinon les options de l'interpréteur PHP).

  9. #9
    Membre éclairé

    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    467
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 467
    Par défaut
    Merci de vos réponses.

    Je marque le sujet en résolu, non pas que j'ai trouvé une solution à mon problème de départ, mais la réponse est : ce n'est pas possible.

    Et pour le log des erreurs, effectivement, à mettre dans htaccess plutot que ini_set

  10. #10
    Modérateur
    Avatar de Bisûnûrs
    Profil pro
    Développeur Web
    Inscrit en
    Janvier 2004
    Messages
    9 931
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Janvier 2004
    Messages : 9 931
    Par défaut
    Tu peux aussi mettre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    error_reporting( E_ALL | E_STRICT );
    ini_set( 'display_errors', 'off' );
    Résultat : N'affiche pas les erreurs mais les loggue dans le fichier par défaut des logs PHP.
    Autre conséquence : Le fait de mettre display_errors à off ici et non dans le fichier php.ini permet d'afficher directement les Parse error dans le navigateur au lieu d'avoir le fichier de logs PHP constamment ouvert pour déceler ce genre d'erreurs.

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

Discussions similaires

  1. Réponses: 6
    Dernier message: 27/01/2004, 11h14
  2. [FP]Writeln ne fonctionne pas !
    Par néo333 dans le forum Turbo Pascal
    Réponses: 4
    Dernier message: 01/11/2003, 23h47
  3. UNION qui ne fonctionne pas
    Par r-zo dans le forum Langage SQL
    Réponses: 7
    Dernier message: 21/07/2003, 10h04
  4. Un Hint sur un PopupMenu ne fonctionne pas !!??
    Par momox dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2003, 16h48
  5. ca ne fonctionne pas (generateur auto-incrémentant)
    Par tripper.dim dans le forum SQL
    Réponses: 7
    Dernier message: 26/11/2002, 00h10

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