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 :

tester si une fonction émet un warning


Sujet :

Langage PHP

  1. #1
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut tester si une fonction émet un warning
    Bonjour.

    Je voudrais tester si une fonction émet un warning.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    $mon_tableau = maFonction ($toto) ;
    if(/* maFonction a émit un warning*/)
    {
       monAction() ;
    }
    Est-ce possible ?

    Merci de votre aide.

    ++Florent.

  2. #2
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Je ne sais pas mais ton exemple relève plutôt d'un problème de conception.

    Ta fonction devrait retourner un booléen true / false ou générer une exception. Si tu dois, même en cas d'un warning, retourner le tableau, peux-être vaut-il mieux retourner les deux infos dans un tableau :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    return array('has_errors' => $haserrors, 'value' => $my_array);
    Sinon il faut probablement comparer le nombre de warnings qu'il y avait avant ton appel dans la stacktrace, et après.

  3. #3
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Salut,

    Citation Envoyé par ThomasR
    Ta fonction devrait retourner un booléen true / false ou générer une exception
    +1

    Sinon, tu peux utiliser la temporisation de sortie.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    ob_start();
     
    $mon_tableau = maFonction($toto);
     
    $l = ob_get_length();
    ob_end_clean();
     
    if($l){
    	monAction();
    }
    Evidemment, cette technique n'est pas adaptée si maFonction() affiche ne serait-ce qu'un seul caractère.

  4. #4
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut
    Merci à vous deux.

    Pour le retour de fonction malheureusement ce n'ai pas moi qui choisi, il s'agit de la fonction ldap_search... Mais je suis d'accord avec toi ThomasR.

    Sinon j'ai un petit problème avec ton code Eric2a.
    Avant j'avais ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    date_du_jour= 19-07-2010
    connexion OK
    autentification OK
    connexion OK
    autentification OK
    domaine = COMMUN
    domaine = COMMUN
     
    Warning: ldap_search() [function.ldap-search]: Partial search results returned: Sizelimit exceeded in D:\users\[...].php on line 270
    tab_ADM (549) elts : tab_bureautiques (1000) elts :
    et maintenant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    warning detecte !!!!
    domaine = COMMUN
     
    Notice: ob_end_clean() [ref.outcontrol]: failed to delete buffer. No buffer to delete. in D:\users\[...].php on line 264
     
    Warning: ldap_search() [function.ldap-search]: Partial search results returned: Sizelimit exceeded in D:\users\[...].php on line 270
    tab_ADM (549) elts : tab_bureautiques (1000) elts :
    Le code de ma fonction :
    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
    /*------------------------------------------------------------------------
     * Entree(s) :
     *    - $link_identifier (connection AD)
     *    - $domaine 
     *    - $base_dn
     * Sortie(s) :
     *    - 
     * variable(s) globale(s) : 
     *    - 
     *------------------------------------------------------------------------
     * 
     * Lit les infos dans la base AD
     * 
     */ 
    function lireBase ($link_identifier, $domaine, $base_dn)
    {
     
        global $max_LDAP_OPT_SIZELIMIT ;
        echo "domaine = $domaine<br />\n" ;
     
        $filter="(&(objectCategory=user)(sAMAccountName=*))";
        ldap_set_option($link_identifier, LDAP_OPT_SIZELIMIT, $max_LDAP_OPT_SIZELIMIT);
     
        $l = ob_get_length();
        ob_end_clean();
     
        if($l){
        	echo "warning detecte !!!!<br />\n" ;
        }
     
        $result_identifier=ldap_search($link_identifier, $base_dn, $filter) ;
     
        return $result_identifier ;
    }

    Voila, on dirait que ça vide les messages affichée avant...

    Merci en tout cas, ça m'a bien aidé.

    ++Florent.

  5. #5
    Membre expert
    Avatar de ThomasR
    Homme Profil pro
    Directeur technique
    Inscrit en
    Décembre 2007
    Messages
    2 230
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2007
    Messages : 2 230
    Points : 3 972
    Points
    3 972
    Par défaut
    Citation Envoyé par Eric2a Voir le message
    Salut,
    Sinon, tu peux utiliser la temporisation de sortie.
    Ca ne fonctionnera pas si on utilise un error handler qui n'a pas pour but d'afficher immédiatement les erreurs, mais c'est une bonne idée.

    Sinon j'ai un petit problème avec ton code Eric2a.
    Je ne vois pas où est ton appel à ob_start().

  6. #6
    Membre émérite
    Avatar de Eric2a
    Homme Profil pro
    Technicien
    Inscrit en
    Septembre 2005
    Messages
    1 225
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : Technicien

    Informations forums :
    Inscription : Septembre 2005
    Messages : 1 225
    Points : 2 411
    Points
    2 411
    Par défaut
    Citation Envoyé par ThomasR
    Ca ne fonctionnera pas si on utilise un error handler qui n'a pas pour but d'afficher immédiatement les erreurs
    C'est vrai tu as raison de le souligner...

    Dans ce cas, nous pouvons faire comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    $erpt_tmp=error_reporting(E_ALL); // On affiche tous les erreurs, warnings, ...
     
    // Traitement
     
    error_reporting($erpt_tmp); // On reprend la valeur initiale
    Citation Envoyé par ThomasR
    Je ne vois pas où est ton appel à ob_start().
    Bien vu ThomasR...

    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
    $erpt_tmp=error_reporting(E_ALL);
     
    ob_start();
     
    $filter="(&(objectCategory=user)(sAMAccountName=*))";
    ldap_set_option($link_identifier, LDAP_OPT_SIZELIMIT, $max_LDAP_OPT_SIZELIMIT);
     
    $l = ob_get_length();
    ob_end_clean();
     
    error_reporting($erpt_tmp);
     
    if($l){
    	echo "warning detecte !!!!<br />\n" ;
    }

  7. #7
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut
    [QUOTE=Je ne vois pas où est ton appel à ob_start().[/QUOTE]

    Ha ! Il fallait ?

    Effectivement j'ai un peut zapé ça au copier-coller...

    Ça marche beaucoup mieux, merci.

    ++Florent.

  8. #8
    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

    Et en utilisant un try/catch ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
        maFonction();
    }
    catch(Exception $e) {
        // éventuellement $e->getMessage() pour obtenir ou stocker l'erreur
        monAction();
    }
    Voir le faire dans la fonction maFonction()

  9. #9
    Membre régulier Avatar de floanne
    Inscrit en
    Février 2006
    Messages
    167
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 167
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par RunCodePhp Voir le message
    Salut

    Et en utilisant un try/catch ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    try {
        maFonction();
    }
    catch(Exception $e) {
        // éventuellement $e->getMessage() pour obtenir ou stocker l'erreur
        monAction();
    }
    Voir le faire dans la fonction maFonction()
    Bonjour.

    Non ça ça ne marchait pas mais la solution d'Eric2a marche à merveille...

    Merci de ta contribution.

    ++Florent.

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

Discussions similaires

  1. [GreaseMonkey] Tester si une fonction existe dans le script
    Par osopardo dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 25/09/2009, 11h08
  2. Tester si une fonction existe
    Par Bouki dans le forum C
    Réponses: 2
    Dernier message: 13/01/2008, 14h30
  3. [AJAX] Tester si une fonction existe
    Par Kosti dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 20/08/2007, 18h24
  4. comment tester si une fonction fait bien son travail
    Par access dans le forum Requêtes
    Réponses: 1
    Dernier message: 24/11/2003, 15h46
  5. comment tester si une fonction fait bien son travail
    Par access dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 24/11/2003, 15h46

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