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

Apache Discussion :

Eviter le timeout du navigateur lors de l'exécution d'une page qui peut durer longtemps


Sujet :

Apache

  1. #1
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut Eviter le timeout du navigateur lors de l'exécution d'une page qui peut durer longtemps
    Bonjour,

    Je ne me rappelle plus s'il est possible de créer une page web afin d'avertir les utilisateurs s'il une requête POST ou GET est trop longue et générant un timeout.

    Merci

  2. #2
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Bon,

    Mon souci est un peu plus complexe. En fait, une page web n'est pas accessible dans un délai du timeout, on a une erreur 408 (Request Timeout : Le temps d'attente de la réponse du client est écoulé). Mais dans mon cas, c'est un peu différent car j'affiche des informations sur la page au fur et à mesure.
    Mais, si au bout de 300 secondes (timeout par défaut), ma page n'est pas complétement affichée, le programme s'arrête.

    Comment intercepter la fin du timeout afin de personnaliser un message d'erreur.

    Merci

  3. #3
    Candidat au Club
    Inscrit en
    Mars 2010
    Messages
    3
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 3
    Points : 4
    Points
    4
    Par défaut
    Bonjour ,moi aussi j'ai le même soucis que vous
    je veux personnaliser cette page mais je n'arrive pas à faire:
    j'ai rédirigé ErrorDocument 408(ds httpd.conf) vers une page d'erreur personnalisée;mais le message fatal error maximum execution time est encore affichée
    Alors ,si quelqu'un peut m'aider à faire

  4. #4
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Citation Envoyé par djibril Voir le message
    Mais, si au bout de 300 secondes (timeout par défaut), ma page n'est pas complétement affichée, le programme s'arrête.
    Qui arrête le traitement ? C'est Apache qui s'arrête ? C'est le programme appelé par Apache ? C'est le navigateur qui en a marre d'attendre ?

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  5. #5
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Ce n'est pas moi qui arrête la page. Je ne sais pas si c'est apache qui arrête le programme cgi car je n'ai pas pas de page de timeout.
    C'est soit le navigateur qui en a marre d'attendre ou bien apache qui arrêt le programme.

    Mes tests s'effectuent actuellement sous EasyPHP.

    Merci de ton aide

  6. #6
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Autre remarque.
    J'ai un programme PHP qui lance un programme cgi. Ce dernier affiche quelques informations sur la page puis effectue une requête sur une base de données toutes les toutes les 10 secondes et dort pendant 5 sec (sleep). Si la requête ne donne rien, il recommence la requête, ainsi de suite. Le programme fonctionne correctement. Mais j'ai un cas particulier où le programme va durer ainsi pendant 3 heures environ. Pendant ce temps, rien n'est donc affiché dans la page web. Mais au bout d'un certains temps. Le navigateur firefox met terminé, alors que le programme n'était pas fini. Je n'ai donc pas de message d'erreur, ni de page de timeout. J'ai juste le programme qui a été arrêté par le navigateur (ou apache), je ne sais pas.

  7. #7
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    C'est différent comme use case : tu veux faire durer un programme 3h, pas qu'Apache envoie un message d'erreur custom.

    Dans ce cas, c'est Firefox qui en a marre et qui coupe la connexion, et parce que la connexion est coupée, Apache arrête le traitement PHP. Pour contourner le programme, envoie un caractère à la noix genre un espace après chaque requête, histoire qu'Apache envoie régulièrement des données à Firefox et que ce dernier soit content et ne fasse pas partir la connexion en timeout. Assure-toi aussi que le buffer de sortie de PHP est désactivé, histoire d'être sûr que chaque espace est aussitôt envoyé au navigateur, pas lorsque le buffer est plein.

    Soit dit au passage, ce n'est pas génial du tout de procéder de la sorte : le Web n'est pas du tout prévu pour les tâches de longues durées. Il faut plutôt partir sur une autre approche : un programme ordonnancé (par cron ou tout autre mécanisme) qui ne dépend pas d'une connexion pour s'exécuter et qui logue régulièrement dans une table par exemple un état de son avancement, et ton navigateur qui va juste consulter cette table.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  8. #8
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    C'est différent comme use case : tu veux faire durer un programme 3h, pas qu'Apache envoie un message d'erreur custom.

    Dans ce cas, c'est Firefox qui en a marre et qui coupe la connexion, et parce que la connexion est coupée, Apache arrête le traitement PHP. Pour contourner le programme, envoie un caractère à la noix genre un espace après chaque requête, histoire qu'Apache envoie régulièrement des données à Firefox et que ce dernier soit content et ne fasse pas partir la connexion en timeout. Assure-toi aussi que le buffer de sortie de PHP est désactivé, histoire d'être sûr que chaque espace est aussitôt envoyé au navigateur, pas lorsque le buffer est plein.

    Soit dit au passage, ce n'est pas génial du tout de procéder de la sorte : le Web n'est pas du tout prévu pour les tâches de longues durées. Il faut plutôt partir sur une autre approche : un programme ordonnancé (par cron ou tout autre mécanisme) qui ne dépend pas d'une connexion pour s'exécuter et qui logue régulièrement dans une table par exemple un état de son avancement, et ton navigateur qui va juste consulter cette table.
    Merci pour ta réponse.
    En faite, j'ai déjà un système de fifo cron. Depuis ma page web, je récupère des informations des utilisateurs et lance un autre programme. Ce dernier, du moment où il est lancé ne dépend plus de ma page web et tourne tout seul. Mais afin de savoir s'il est terminé, je suis obligé de checker certains champs d'une table SQL qui me renseigneront sur son statut (fini, anomalie, ou en cours), d'où mes requêtes toutes les 10 secondes. En générale, les programmes ne durent pas plus de 30 secondes. Je suis vraiment dans un cas particulier durant 3 heures.

    Comment s'assurer que le buffer de sortie de PHP est désactivé ? Je ne me rappelle plus.

    Merci

  9. #9
    Rédacteur
    Avatar de _Mac_
    Profil pro
    Inscrit en
    Août 2005
    Messages
    9 601
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 9 601
    Points : 12 977
    Points
    12 977
    Par défaut
    Moi non plus, je ne m'en rappelle plus Peut-être dans php.ini si tu peux le modifier, sinon tu trouveras sûrement en demander à ton moteur de recherche préféré.

    Du détail, du détail, du détail !!!
    Revenons à la source : lisons la documentation et les fichiers de trace, la réponse à notre problème s'y trouve sans doute

  10. #10
    Responsable Perl et Outils

    Avatar de djibril
    Homme Profil pro
    Inscrit en
    Avril 2004
    Messages
    19 820
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 19 820
    Points : 498 771
    Points
    498 771
    Par défaut
    Citation Envoyé par _Mac_ Voir le message
    Moi non plus, je ne m'en rappelle plus Peut-être dans php.ini si tu peux le modifier, sinon tu trouveras sûrement en demander à ton moteur de recherche préféré.
    De toute façon, à ce niveau, ce n'est pas du php, donc mon souci ne se pose plus en ce qui concerne le buffer .
    Bon, j'ai opté pour ta solution avec les espaces. En plus de cela, j'augmente mon sleep à 30 secondes si le programme dure depuis plus d'un certains temps.

    Je vais considérer que mon problème est résolu même si l'on a juste trouvé une parade à la question posée .

    Merci

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 01/02/2013, 11h40
  2. Réponses: 0
    Dernier message: 22/11/2012, 12h17
  3. Erreur par le navigateur lors de l'exécution d'un applet
    Par tiloup367 dans le forum Applets
    Réponses: 6
    Dernier message: 27/03/2011, 18h38
  4. Réponses: 2
    Dernier message: 07/01/2010, 09h43
  5. Réponses: 7
    Dernier message: 18/03/2009, 12h54

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