dimi3 Posté 3 Février 2013 Posté 3 Février 2013 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.
Dan Posté 3 Février 2013 Posté 3 Février 2013 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é.
dimi3 Posté 3 Février 2013 Auteur Posté 3 Février 2013 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.
Dan Posté 3 Février 2013 Posté 3 Février 2013 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.
dimi3 Posté 3 Février 2013 Auteur Posté 3 Février 2013 (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é 3 Février 2013 par dimi3
Solution jcaron Posté 3 Février 2013 Solution Posté 3 Février 2013 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.
dimi3 Posté 3 Février 2013 Auteur Posté 3 Février 2013 Merci pour les idées. Je vais réfléchir à tout ça.
dimi3 Posté 3 Février 2013 Auteur Posté 3 Février 2013 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...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant