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

EDI, CMS, Outils, Scripts et API PHP Discussion :

Exécution d'un script long, navigateur plante. [Wamp]


Sujet :

EDI, CMS, Outils, Scripts et API PHP

  1. #1
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut Exécution d'un script long, navigateur plante.
    Salut les devz,

    Vous allez bien?

    Voilà, vous connaissez le thème du sujet. J'ai un script qui tourne assez longtemps, mais je vous rassure, je ne vous poserai pas la question de comment augmenter la limite d'exécution etc. Ça c'est correctement paramétré, le script prend autant de temps qu'il le faut pour traiter.

    Par contre, mon navigateur plante à cause de l'exécution, Firefox "ne répond pas" et je ne peux pas voir la fin de l'exécution.

    Il y aurait-il un outil pour suivre l'exécution du script? Firebug fait-il cela?

    D'avance, merci.
    C'est à ... que vous ... le plus de mystères.

  2. #2
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    Pour les scripts longs qui se terminent bien, il est préférable de les appeler en ajax à partir de ta page. De cette manière le navigateur ne te dégagera pas et attendra patiemment la réponse du serveur.

  3. #3
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Merci rawsrc,
    comment peut-on envoyer une requête en ajax? Via le navigateur ou dans le code de mon script? =o
    C'est à ... que vous ... le plus de mystères.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Dans le code de ton script, je te conseil jQuery qui le fait très facilement :

    jQuery Ajax

    Autrement, le fait que ton navigateur (tout comme n'importe quel programme sous Windows) ne réponde plus ne veut pas dire qu'il ne répondra plus ou qu'il a planté, mais simplement que le système n'a pas reçu de signal de sa part depuis un temps trop important.

    Windows le considère donc comme "mort" et propose de le fermer, mais si tu attends et que ton script se termine il reviendra à la normale.

    Si tu es sur Seven il te propose d'ailleurs d'attendre ou de fermer.

  5. #5
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Ok merci pour tes explications.

    J'ai suivi ton conseil, et essayé la requête en ajax :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <script>
    	$.ajax({
    	  url: "seek.php"
    	}).done(function() { 
    	  $("#done").show();
    	});
    </script>
    Mais apparemment il y a une erreur, firebug me montre la fin de mon script php et affiche "aucun élément trouvé"
    C'est à ... que vous ... le plus de mystères.

  6. #6
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Mon script php ne fait que lire et traiter des fichiers (long), mais ne retourne rien de spécial, il ne fait que des "echo" pour afficher un résultat.
    La requête Ajax attendrait-elle une réponse en retour de ce script?
    C'est à ... que vous ... le plus de mystères.

  7. #7
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    46
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 46
    Points : 28
    Points
    28
    Par défaut
    Les echo que tu fais dans ton script feront partie de la réponse renvoyé par le serveur. Tu n'as rien d'obligatoire à renvoyer, PHP s'occupe tout seul d'envoyer les bon headers HTTP si tu lui précise rien.

    En revanche si ton script provoque une erreur fatale ou qu'il n'est pas trouvé, ta callback done() ne sera pas appelée, utilise fail() pour ça.

    Si firebug t'envoi une erreur, et vu le code que tu as fourni ici, elle vient pas de l'appel ajax à mon avis.

  8. #8
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    c'est ça qui est bizarre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script>
    	/*$.ajax({
    	  url: "seek_oeuf.php"
    	}).done(function() { 
    	  $("#done").show();
    	});*/
    	var jqxhr = $.ajax( "seek_oeuf.php" )
        .done(function() { alert("success"); })
        .fail(function() { alert("error"); })
        .always(function() { alert("complete"); });
    </script>
    ce qui m'affiche "success" et puis "complete".
    C'est à ... que vous ... le plus de mystères.

  9. #9
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par arkham55 Voir le message
    c'est ça qui est bizarre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <script>
    	/*$.ajax({
    	  url: "seek_oeuf.php"
    	}).done(function() { 
    	  $("#done").show();
    	});*/
    	var jqxhr = $.ajax( "seek_oeuf.php" )
        .done(function() { alert("success"); })
        .fail(function() { alert("error"); })
        .always(function() { alert("complete"); });
    </script>
    ce qui m'affiche "success" et puis "complete".
    Et pourquoi ce serait bizarre ? Tel que tu l'a écrit, si tout c'est bien passé c'est que qu'il doit renvoyer.

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Points : 1 022
    Points
    1 022
    Par défaut
    Pour ma part je te conseil de mettre les résultats de la requête dans une bdd, ou un fichier ( Aucun affichage sur le navigateur durant l’exécution ) [tu peu laisser tourner ton appli trankilou]

    Aussi te préparer une page avec suivi de l’exécution du script, qui interroge en live l’état de la requête

    Et au final préparer une page pour que quand même, on se rende compte que c'est du boulot
    Conception / Dev

  11. #11
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Citation Envoyé par ABCIWEB Voir le message
    Et pourquoi ce serait bizarre ? Tel que tu l'a écrit, si tout c'est bien passé c'est que qu'il doit renvoyer.
    Parce que le script lancé directement, mets 2 minutes à terminer. Alors qu'ainsi, l'alert est appelé instantanément.
    C'est à ... que vous ... le plus de mystères.

  12. #12
    Expert éminent sénior

    Homme Profil pro
    Développeur Web
    Inscrit en
    Septembre 2010
    Messages
    5 380
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Puy de Dôme (Auvergne)

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

    Informations forums :
    Inscription : Septembre 2010
    Messages : 5 380
    Points : 10 410
    Points
    10 410
    Par défaut
    Citation Envoyé par arkham55 Voir le message
    Parce que le script lancé directement, mets 2 minutes à terminer. Alors qu'ainsi, l'alert est appelé instantanément.
    "success" est renvoyé dès que le serveur renvoi quelque chose. Certainement que tu fais afficher quelque chose côté php avant la fin de ton traitement ?

    Parce que chez moi en testant ton script et en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <?php
    sleep(30);
    echo 'yes';
    ?>
    comme code de "seek_oeuf.php", il faut bien attendre 30 secondes avant de recevoir le premier message "succes", ce qui est correct.

  13. #13
    Membre régulier Avatar de arkham55
    Profil pro
    Inscrit en
    Mars 2010
    Messages
    179
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2010
    Messages : 179
    Points : 74
    Points
    74
    Par défaut
    Tu as totalement raison, un écho était fait avant la boucle qui prend un peu de temps. Je l'ai commenté et à présent le script fonctionne, firefox ne plante plus.
    Merci à tout le monde =)
    C'est à ... que vous ... le plus de mystères.

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

Discussions similaires

  1. Réponses: 2
    Dernier message: 08/01/2012, 15h03
  2. Script long qui bloque le navigateur
    Par ifrit 23 dans le forum Langage
    Réponses: 15
    Dernier message: 05/03/2010, 11h18
  3. Le temps d'exécution de vos scripts perl!!
    Par djibril dans le forum Langage
    Réponses: 5
    Dernier message: 17/06/2009, 10h42
  4. [PHP 5.2] Exécution d'un script extrèmement long en arrière plan
    Par Jérémie A. dans le forum Langage
    Réponses: 4
    Dernier message: 19/01/2009, 18h47
  5. Réponses: 6
    Dernier message: 29/11/2005, 13h22

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