Aller au contenu
dimi3

contourner le temps d'exécution limité

Noter ce sujet :

Recommended Posts

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.


Partager ce message


Lien à poster
Partager sur d’autres sites

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é.


Partager ce message


Lien à poster
Partager sur d’autres sites

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.


Partager ce message


Lien à poster
Partager sur d’autres sites

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.


Partager ce message


Lien à poster
Partager sur d’autres sites

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

Partager ce message


Lien à poster
Partager sur d’autres sites

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.


Partager ce message


Lien à poster
Partager sur d’autres sites

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...

Partager ce message


Lien à poster
Partager sur d’autres sites

Créer un compte ou se connecter pour commenter

Vous devez être membre afin de pouvoir déposer un commentaire

Créer un compte

Créez un compte sur notre communauté. C’est facile !

Créer un nouveau compte

Se connecter

Vous avez déjà un compte ? Connectez-vous ici.

Connectez-vous maintenant

×