Aller au contenu

contourner le temps d'exécution limité


Aller à la solution Solutionné par jcaron,

Sujets conseillés

Posté

Bonjour,



Mes programmes devant traiter des quantités de données avant affichage, il est fréquent qu'ils décrochent afin de finir (time out...).



N'ayant pas accès au fichier de configuration PHP et l'hébergeur n'étant pas très chaud pour l'augmenter, je me demande s'il y a moyen de contourner le temps-limite par programmation.


Je rêve d'une page qui par exemple, avertirait l'utilisateur du temps limite dépassé et lui proposerait un bouton à cliquer pour poursuivre le travail. Une telle chose est-elle possible ?


Voyez-vous d'autres solutions ?



Je vous remercie de vos idées.


Posté

La fonction set_time_limit() sert à repousser la durée limite d'exécution d'un script.


Malheureusement elle n'a aucun effet lorsque php tourne en safe_mode, ce qui est vraisemblablement le cas sur un hébergement mutualisé.


Posté

Bonjour et merci pour votre réaction rapide.



Vous avez raison. C'est pourquoi je cherche une astuce pour que le programme stoppé redémarre et puisse finir son travail.


Posté

As-tu envisagé d'utiliser un cache php ? Cela pourrait sensiblement diminuer le temps d'exécution.



Mais, par défaut, cette limite est fixée à 30 secondes, sauf si ton hébergeur a réduit cette valeur.


Et ce n'est que le temps CPU utilisé par le script, hors appels systèmes, entrées-sorties... etc. Donc si tu dépasses ce temps, tu devrais peut-être revoir ton script.


Posté (modifié)

J'ai regardé un petit peu cette possibilité. Je crois comprendre que cette fonction met en cache un traitement déjà effectué pour le réafficher instantanément plus tard. Mon problème est la longueur du traitement lui-même. La mise en cache d'un traitement inachevé en raison de la limite de temps d'exécution ne me paraît pas résoudre le problème. Je me trompe ?


Modifié par dimi3
  • Solution
Posté

Si tu peux découper le traitement en plusieurs morceaux, tu peux faire une partie du traitement, puis un redirect vers le même script avec un paramètre différent qui veut dire qu'il faut faire la deuxième partie, et ainsi de suite. Il te faudra probablement stocker des résultats intermédiaires quelque part.



Ceci étant dit, un serveur web (mutualisé en plus) ne me paraît pas vraiment l'endroit idéal pour une tâche de ce genre...



Jacques.


Posté

Merci pour vos idées qui m'ont conduit à lire 1000 lignes par 1000 lignes les fichiers textes à traiter. Un petit coup de javascript (window.location) relance le programme autant de fois qu'il le faut. Le nombre de relances est calculé préalablement par une simple division (nombre d'enregistrements du fichiers-texte / 1000) ( + 1 s'il y a un reste). Décrémentation à chaque relance. Les résultats s'ajoutent dans un fichier texte (mode "a").La limite d'exécution imposée par l'hébergeur est respectée... Le top !



Encore merci pour les pistes proposées...

Veuillez vous connecter pour commenter

Vous pourrez laisser un commentaire après vous êtes connecté.



Connectez-vous maintenant
×
×
  • Créer...