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

Zend Framework PHP Discussion :

Comment passer outre le max execution time ?


Sujet :

Zend Framework PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut Comment passer outre le max execution time ?
    Bonjour

    Pour un projet que je développe avec ZendFramework, j'ai un petit problème.
    Parmi les fonctionnalités que je dois implémenter il y a la génération d'un fichier d'export d'une table particulièrement grosse (> 20 000 enregistrements).
    Si mon script traite toute la table je vais surement être confrontée au dépassement du délais d'exécution.


    Voici les idées que j'ai pour résoudre ce problème. Peut être en existe-til de meilleure solution.



    Traiter par ex 1000 lignes, enregistrer dans un fichier temporaire le résultat et dans un autre fichier l'ID max atteint, et rediriger vers la même action, qui récupère l'ID max soit en parametre soit dans le fichier et traite les 1000 lignes suivante et ainsi de suite jusqu'a l'épuisement des données à exporter. A la fin l'action met le fichier généré à disposition du client.
    En cas de pb le systeme est capable de faire une reprise sur erreur en repartant du dernier ID enregistré dans le fichier.

    Ainsi, je suppose qu'a chaque itération il s'agira d'un nouvel appel donc je ne devrais pas avoir ce pb de max execution time.

    Est ce que je risque d'avoir un pb avec le navigateur qui détecte des redirections en boucle ?

    Est ce qu'il y a un meilleur moyen de traiter ce type de problèmes ?

    Est ce qu'il y a un moyen pour qu'a chaque itération je puisse afficher la progression au client ?

    Merci d'avance

    Nathalie

  2. #2
    Membre expérimenté
    Homme Profil pro
    Développeur Web
    Inscrit en
    Décembre 2010
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2010
    Messages : 144
    Par défaut
    Tu peux soit faire les traitements par lots, comme tu l'as indiqué, ou alors modifier la valeur de déclenchement du timeout : http://php.net/manual/fr/function.set-time-limit.php

    Pour suivre la progression tu peux faire ça en ajax.
    Une première requête ajax appel ton script qui fait les traitements, et qui par la même occasion met à jour un champs dans la base de données ou un fichier pour stocker l'état d'avancement. Et une deuxième requête ajax (exécutées toutes les secondes par exemple) qui récupère l'état d'avancement et l'affiche au client.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut
    Merci pour ta réponse.

    par contre si l'appel du script d'export se fait en ajax, je peux lui faire faire une redirection ? Ca va marcher ?
    Ca serait idéal du point de vue du client ca serait plus propre.

  4. #4
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Bonjour,
    L'appel ajax n'a pas de limite d'exécution il me semble, d'ailleurs heureusement.

    Pour changer le temps d'exécution, il suffit que tu le mettes sur le fichier interrogé.

  5. #5
    Membre émérite

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    si c'est une tache habituelle, plutôt que faire cela à la main, une tache chron, avec le fichier de traitement dans cgi-bin?

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    105
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 105
    Par défaut
    L'appel ajax a forcement un temps limite d'execution s'il execute du code php : celui du serveur php !
    Et je ne crois pas que je puisse faire le coup de la redirection a un appel ajax (l'ajax appel un controller/action qui se rappelle lui même x fois avant de renvoyer un retour a l'ajax).

    Par ailleurs, je pense que changer le max execution time n'est pas une solution, il y a toujours un jour ou ca durera trop longtemps (j'en ai bavé avec phpMyAdmin pour importer les données dans ma base) , et de toutes façon, mon programme sera sur un serveur hébergé donc je vais devoir me contenter des 30 secondes !

    J'ai implémenté en faisait une redirection et en passant l'ID dans l'URL. Les temps d'exécution sont assez bon (moins de 30 sec pour exporter 15 000 lignes par paquets de 1000 - mon PC est un bouzin, il arrive tout juste a faire tourner eclipse). Du coup pas besoin de m’embêter à stocker l'ID temporairement. En vas d'échec on recommence à zéro !

  7. #7
    Membre Expert
    Avatar de 5h4rk
    Homme Profil pro
    CTO at TabMo
    Inscrit en
    Février 2011
    Messages
    813
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : CTO at TabMo
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Février 2011
    Messages : 813
    Par défaut
    Non l'appel ajax n'a pas la limite du serveur car il s'agit de javascript donc côté client et non serveur.

    Il faudrait peut être plus que tu nous expliques clairement ton problème, peut être avons nous la solution.

    Peut être une optimisation ou une autre façon de faire

Discussions similaires

  1. Réponses: 2
    Dernier message: 07/05/2015, 13h44
  2. Max execution time et Tomcat
    Par Invité dans le forum Tomcat et TomEE
    Réponses: 0
    Dernier message: 07/11/2011, 17h44
  3. max execution time
    Par ntrvdonett dans le forum Administration
    Réponses: 5
    Dernier message: 17/12/2010, 14h18
  4. comment passer de access à MySQL
    Par isa_21 dans le forum Requêtes
    Réponses: 4
    Dernier message: 06/10/2004, 08h51
  5. Comment passer sous Delphi ?
    Par J-P-B dans le forum XMLRAD
    Réponses: 2
    Dernier message: 13/06/2003, 10h09

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