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 :

Connaitre la raison d'une interruption de script


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 91
    Points
    91
    Par défaut Connaitre la raison d'une interruption de script
    Bonjour,

    Je travaille actuellement sur un script PHP appelé en AJAX qui génère un CSV à partir de données provenant d'une BDD.

    A partir d'un certain nombre de lignes retournées, le script s'arrête sans donner d'informations.
    Par "ne pas donner d'informations", j'entend :
    - mon handler utilisé par set_error_handler,
    - aucune exception n'est levée alors que le script s'arrête en plein milieu d'une boucle entourée par un try/catch (qui écrit dans mon fichier de log).

    Je me demandais donc si il existait un moyen (peut être une combinaison d'handlers) pour connaître à tout les coup la raison de l'arrêt de mon script.

    Précision sur le script (je ne met pas de code car il est pollué par les nombreux tracking que j'effectue) : dans la boucle, je copie les éléments d'un cursor vers un array.
    Le script s'arrête inexorablement au 8815e élément (alors que le cursor indique 12102 résultats).

  2. #2
    Modérateur
    Avatar de grunk
    Homme Profil pro
    Lead dév - Architecte
    Inscrit en
    Août 2003
    Messages
    6 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Côte d'Or (Bourgogne)

    Informations professionnelles :
    Activité : Lead dév - Architecte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2003
    Messages : 6 692
    Points : 20 243
    Points
    20 243
    Par défaut
    La directive error_reporting est bien fixée à E_ALL | E_STRICT ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 91
    Points
    91
    Par défaut
    Oui...
    Je viens de tester avec une erreur volontaire et mon handler est bien appelé.
    Par contre, il n'est pas appelé à la fin du script.

    Pour aider, j'ai a peu près le le 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
     
    $cursor = getCursorFromDB($query); // il s'agit d'un MongoCursor
    $i=0;
    log($cursor->count());
    while($cursor->hasNext())
    {
       try
       {
          $tableau[] = $cursor->getNext();
          log("recuperation $i\n");
       }
       catch(Exception $e)
       { log("PLANTAGE - $i : {$e->getMessage()}\r\n"); }
    }
    Et dans mon log, si le résultat de ma requète est trop important, i.e., mon cursor à trop d'entrées, le script s'arrète en plein milieu de la boucle.
    J'ai bien les logs intermédiaires, mais je n'ai pas d'erreurs si je connecte un error_handler, et je n'ai pas non plus le log du try/catch.

    EDIT: la fonction log, c'est juste l'écriture dans un fichier, elle n'existe pas dans mon programme, c'est juste pour m'épargner d'écrire des fopen, fwrite, etc. Faut imaginer qu'elle va écrire dans un fichier, et c'est ce qui se passe en réalité dans mon programme.

  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 727
    Points
    10 727
    Par défaut
    fait un echo a la place de ton log, et au debut de ton script met


  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 91
    Points
    91
    Par défaut
    Je ne vois pas bien l'intérêt pour le coup.
    En effet, même si je fais un ob_implicit_flush(), il faudra bien que par la suite je récupère le contenu du tampon de sortie.
    Et donc, dans mon cas, que je l'écrive dans un fichier.

    Hors, c'est déjà ce que je fais, dans mon précédent message, j'indique que la fonction log n'existe pas dans mon code, c'est simplement un raccourci algorithmique pour indiquer que j'écris dans un fichier.

    En fait, je voudrais simplement savoir si il existe un moyen de détecter l'interruption d'un script et d'en extraire un log qui indique la cause de l'arrêt.

  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 727
    Points
    10 727
    Par défaut
    ob_implcit_flush va tout afficher séquentiellement, donc tu va voir ou ça s'arrete

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    159
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 159
    Points : 91
    Points
    91
    Par défaut
    OK, j'ai compris et testé.
    Même résultat. Il s'arrête au même endroit, mais n'envoie pas d'erreur, j'ai le même résultat que dans mon fichier exactement.
    Il s'arrête en plein milieu sans rien me dire.

Discussions similaires

  1. connaitre la durée d'une animation avec action script
    Par edzodzinam dans le forum Flash
    Réponses: 4
    Dernier message: 15/07/2008, 11h07
  2. [Reflection] Connaître le nom d'une variable ...
    Par dahwoud dans le forum API standards et tierces
    Réponses: 7
    Dernier message: 09/08/2005, 14h37
  3. Réponses: 2
    Dernier message: 14/07/2004, 16h55
  4. Comment connaitre l'appelant d'une méthode
    Par Alec6 dans le forum API standards et tierces
    Réponses: 5
    Dernier message: 12/07/2004, 14h51
  5. Réponses: 1
    Dernier message: 12/05/2004, 19h02

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