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 :

Traitement long et état d'avancement


Sujet :

Langage PHP

  1. #1
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut Traitement long et état d'avancement
    Bonjour à tous,

    Dans le cadre d'un développement interne, l'on m'a demandé de réaliser un site internet permettant de traiter des valeurs se trouvant dans une BD.
    Jusqu'ici, pas de soucis, le tout fonctionne.

    Dès lors, lorsque je lance un traitement particulier, le temps d'exécution est trop long, et j'obtiens un message de timeout dans le navigateur (grande quantité d'information à traiter).

    Je souhaiterai donc savoir, si il est possible, soit de changer le timeout d'une page en particulier, lors d'un appel particulier, ou alors si il existe un autre système. J'ai pensé à l'AJAX, mais ce qui me dérange, est que je ne sais pas comment faire en AJAX pour récupérer un semblant de progression de la tâche (calculable en prenant le nombre total d'éléments à traiter et en réalisant une règle de trois), à savoir retourner plusieurs fois des valeurs dans l'appel.

    En vous remerciant pour les avis que vous pourrez me donner.
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  2. #2
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Points : 16 372
    Points
    16 372
    Par défaut
    Pour changer le temps limite tu as set_time_limit.
    Sinon, p'tet que regarder si tu ne peux pas optimiser ton code, histoire qu'il prenne moins longtemps, pourrait être une bonne idée (évidement c'est pas forcément possible)
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

  3. #3
    Membre actif
    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
    Points : 241
    Points
    241
    Par défaut
    Pour compléter la réponse de Celira, le fait de passer par un appel en ajax ne réglera pas le problème, le script continuera à dépasser sa durée maximum d’exécution et partira en timeout.
    Sinon il y a aussi la possibilité de traiter les taches une par une avec des appels ajax. Le temps d’exécution ne devrait pas être dépassé, et tu pourras récupérer la progression.

  4. #4
    Membre habitué Avatar de richard_sraing
    Homme Profil pro
    Responsable de service informatique
    Inscrit en
    Avril 2005
    Messages
    483
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Responsable de service informatique
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Avril 2005
    Messages : 483
    Points : 182
    Points
    182
    Par défaut
    OK,

    Alors, au niveau du code, je ne sais pas vraiment le réduire au niveau du temps exécution.

    Pour les appels AJAX, si je comprend bien, il me faudrait faire un appel AJAX par données à traiter ?
    First step: F.A.Q.
    Second step: Forum -> Recherche
    Thrid step: Forum -> Poser une question
    Fourth step: Forum -> Attendre une réponse
    Fifth step: Forum -> Remercier les personnes ayant répondu et signaler comme résolu

    Simple non ? l'utilisation de developpez.com

  5. #5
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248
    Par défaut
    Je vois 2 solutions:

    Solution 1 si tu ne veux pas toucher au set_time_limit:

    Faire un appel ajax par donnée a traiter, dans la mesure ou tu connaîtrais toutes les données à traiter côté client.
    Aillant la somme de toutes les données à traiter, tu peux par la même occasion incrémenter une barre de progression

    Solution 2 en touchant au set_time_limit:

    Tu ne touche pas ton script actuel, qui s'exécutera bien jusqu'au bout, tu lui ajoute juste une ligne qui log la progression dans un fichier ou une table de bdd à chaque itération.
    Via ajax tu lance une requête de récupération de la progression toutes les secondes pour incrémenter ta barre de progression.

  6. #6
    Membre du Club
    Profil pro
    Developpeur PHP Magento e-commerce
    Inscrit en
    Juin 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Developpeur PHP Magento e-commerce
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 53
    Points : 51
    Points
    51
    Par défaut
    Le plus simple serait d'ajouter le traitement à une pile d'exécution.

    La pile d'exécution serait ensuite exécutée par un cron lancé toutes les 5 minutes par exemple.

  7. #7
    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 Grégory PLANCHAT Voir le message
    Le plus simple serait d'ajouter le traitement à une pile d'exécution.

    La pile d'exécution serait ensuite exécutée par un cron lancé toutes les 5 minutes par exemple.
    Avec une récup du statut en AJAX et c'est propre.
    Le logiciel, c'est comme le sexe, c'est meilleur quand c'est libre.

    Linus Torvalds

  8. #8
    Membre actif
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2003
    Messages
    152
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Rhône (Rhône Alpes)

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

    Informations forums :
    Inscription : Février 2003
    Messages : 152
    Points : 248
    Points
    248
    Par défaut
    Citation Envoyé par Grégory PLANCHAT Voir le message
    Le plus simple serait d'ajouter le traitement à une pile d'exécution.

    La pile d'exécution serait ensuite exécutée par un cron lancé toutes les 5 minutes par exemple.
    Clair que c'est encore mieux que ce que je proposais.
    Je l'avais d'ailleurs mis en place de la sorte dans ma dernière boite pour plusieurs traitements.

  9. #9
    Membre du Club
    Profil pro
    Developpeur PHP Magento e-commerce
    Inscrit en
    Juin 2005
    Messages
    53
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Loire (Auvergne)

    Informations professionnelles :
    Activité : Developpeur PHP Magento e-commerce
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Juin 2005
    Messages : 53
    Points : 51
    Points
    51
    Par défaut
    C'est ce qu'on met en place très régulièrement pour nos clients qui exploitent Magento sur des sites à fort trafic.

    Associé à une solution de supervision, le système est quasi-autonome.

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/05/2012, 13h40
  2. Afficher l'état d'avancement d'un traitement
    Par felix79 dans le forum Wicket
    Réponses: 7
    Dernier message: 22/06/2011, 14h04
  3. Réponses: 5
    Dernier message: 14/12/2005, 09h28
  4. état d'avancement d'un CopyFile()
    Par Xam335 dans le forum C++Builder
    Réponses: 7
    Dernier message: 23/09/2005, 11h12
  5. [SAX] Parser SAX : connaitre l'état d'avancement
    Par GLA31 dans le forum Format d'échange (XML, JSON...)
    Réponses: 3
    Dernier message: 26/10/2004, 09h08

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