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 :

Gérer timeout d'une fonction PHP


Sujet :

Langage PHP

  1. #1
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut Gérer timeout d'une fonction PHP
    Bonjour à tous,

    mon application utilise LDAP pour authentifier des utilisateurs et parfois j'ai une fonction LDAP (search) qui ne répond pas et plante au bout de 30 sec (j'ai laissé la valeur par défaut).

    Pour éviter ce genre de problème, est-ce qu'il est possible de faire une sorte de try catch autour de cet appel de fonction et de catcher si ça dépasse 10 secondes par exemple?

    Merci d'avance.

  2. #2
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    tu peux changer le temps du timeout avec stream_set_timeout, et faire un exception avec, set_error_handler

  3. #3
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Merci pour ta réponse,

    le stream_set_timeout ne m'est pas utile je pense. J'ai redéfinit le timeout à 10 secondes et précisé mon handler. Cependant il ne catch pas les erreurs du type timeout.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    <?php
    public static function .....
    {
        ........
        set_error_handler( array( new Ldap(), 'timeoutHandler' ) );
        set_time_limit ( 10 );
        $entries	 = $ldapManager->search( $dn, $filter, $fields );
        .........
    }

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <?php
    // Gestionnaire d'erreurs pour faire sauter le timeout
    public static function timeoutHandler($errno, $errstr, $errfile, $errline)
    { 
    	exit( 'caught' );
    	return true;
    }
    L'erreur n'est pas attrapée puisque j'ai sur ma page Fatal error: Maximum execution time of 10 seconds exceeded in ...

    Une idée de ce que je fais mal ou de si j'utilise pas la bonne méthode?

    merci d'avance


    EDIT :

    si j'exécute ça :

    set_error_handler(array(new Ldap(),'timeoutHandler')); set_time_limit ( 10 );
    $a = 10/ 0;

    j'ai bien le "caught" d'affiché

  4. #4
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    c'est pas super aisé a gérer ce genre d'erreur, exceptionnellement met un @

  5. #5
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Je vois pas pourquoi mettre un @ devant changerait quelque chose.

    si le handler ne catch pas l'erreur, le @ ne va rien changer non ?

  6. #6
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par icl1c Voir le message
    Je vois pas pourquoi mettre un @ devant changerait quelque chose.

    si le handler ne catch pas l'erreur, le @ ne va rien changer non ?
    la fonction renvoie false

  7. #7
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Le problème ne vient pas de là :

    Venant de la doc de set_error_handler :
    The following error types cannot be handled with a user defined function: E_ERROR, E_PARSE, E_CORE_ERROR, E_CORE_WARNING, E_COMPILE_ERROR, E_COMPILE_WARNING, and most of E_STRICT raised in the file where set_error_handler() is called.
    faut que je trouve un moyen de contourner ça =/

  8. #8
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    avec le @ t'aura plus l'erreur juste la fonction qui renvoie false

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $entrie = @$ldapManager->search( $dn, $filter, $fields );

  9. #9
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Oui ok, je pensais pas mettre le @ là.

    Je te tiens informé, faut attendre que le problème se reproduise ..

  10. #10
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    Bon, avec le @ devant l'appel de la méthode search, l'erreur n'est plus affichée mais j'ai une page blanche à la place.

    y a moyen de contourner ça?

  11. #11
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par icl1c Voir le message
    Bon, avec le @ devant l'appel de la méthode search, l'erreur n'est plus affichée mais j'ai une page blanche à la place.

    y a moyen de contourner ça?
    oui, c'est que je te dit, vue que ça renvoie false fait une condition

  12. #12
    Membre du Club
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Points : 48
    Points
    48
    Par défaut
    ça ne va pas renvoyer false puisque c'est cette fonction qui plante et qui provoque le timeout.

    Elle ne retourne donc pas faux.

  13. #13
    Expert éminent sénior

    Profil pro
    Inscrit en
    Septembre 2010
    Messages
    7 920
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2010
    Messages : 7 920
    Points : 10 726
    Points
    10 726
    Par défaut
    Citation Envoyé par icl1c Voir le message
    ça ne va pas renvoyer false puisque c'est cette fonction qui plante et qui provoque le timeout.

    Elle ne retourne donc pas faux.
    regarde, fais un var_dump

  14. #14
    Membre éprouvé Avatar de Marc3001
    Homme Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2008
    Messages
    829
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2008
    Messages : 829
    Points : 1 275
    Points
    1 275
    Par défaut
    Citation Envoyé par icl1c Voir le message
    ça ne va pas renvoyer false puisque c'est cette fonction qui plante et qui provoque le timeout.

    Elle ne retourne donc pas faux.
    Le minimum serait de vérifier avant de contredire la personne qui t'aide et qui je pense connait plus ce language que toi....
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

Discussions similaires

  1. Réponses: 7
    Dernier message: 29/05/2007, 15h11
  2. demande d'une fonction php
    Par carmen256 dans le forum Langage
    Réponses: 5
    Dernier message: 20/01/2006, 19h52
  3. Réponses: 6
    Dernier message: 08/01/2006, 12h49
  4. Modifier un champs texte avec une fonction PHP (calcul TVA)
    Par Stella2809 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 22/11/2005, 00h55
  5. Réponses: 3
    Dernier message: 06/11/2005, 18h02

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