Long processus

Long processus - PHP - Programmation

Marsh Posté le 27-09-2006 à 13:41:42    

Bonjour,
 
Une petite question qui m'a parfois titillé, mais que j'ai pu toujours laisser de côté.
 
Dans un petit programme, quand on lance une boucle qui par exemple :
redimensionnement des images (1.5mo max), et fait quelques modifications
Si je fait une boucle sur de nombreuses photos, le navigateur me met une erreur comme quoi il y a un dépassement de temps pour le processus.
 
C'est quoi la solution propre pour résoudre ce souci.
 
Merci

Reply

Marsh Posté le 27-09-2006 à 13:41:42   

Reply

Marsh Posté le 27-09-2006 à 13:50:55    

augmenter le temps alloué à ton processus...
Tu as un chien de garde pour les processus php.. ainsi tu peux définir dans php.ini, un temps max de processus : max_execution_time = ....
en secondes
Si tu mets à 0, le processus n'as pas de limite, mais bon s'pa top en cas de boucle infinie etc..

Reply

Marsh Posté le 27-09-2006 à 13:53:41    

oki doki...Merci pour l'info...
 
Mais c'est la seule solution?
 
Il y a pas un moyen de lui dire, ceci est un prosessus propre qui bugue pas.

Reply

Marsh Posté le 27-09-2006 à 13:59:18    

si, en fait dans le script qui prend du temps, tu peux dire set_time_limit(...); afin d'augmenter le temps d'exécution potentiel. Attention toute fois, chaque appel remet à zéro le compteur de temps et repart pour de nouveau la nouvel limite.
 

Reply

Marsh Posté le 27-09-2006 à 14:07:14    

Le problème est que sur une grande partie des serveurs mutualisés tu n'as pas le droit de le faire :( ... J'ai eu recemment le problème avec un site sur lequel on doit pouvoir uploader des zip d'une 10ene de Mo, puis les deziper :/


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 27-09-2006 à 14:16:23    

trois solutions :

  • max_execution_time dans le php.ini
  • set_time_limit dans le script
  • découpage de l'exécution en plusieurs parties avec passage d'une partie à l'autre par raffraichissement de la page dans le navigateur.

Reply

Marsh Posté le 27-09-2006 à 14:17:25    

xtof >> j'ai été confronté au problème, à l'époque j'avais contourné le problème de cette manière :
 
- stockage en session d'un tableau contenant les chemins d'accès aux photos à traiter
- redirection vers un script  qui teste s'il y a des photos à traiter ; si c'est le cas le script effectue le traitement pour disons une quinzaine de photos en les supprimant du tableau au fur et à mesure, puis redirige vers lui-même. S'il n'y a pas (plus) de photos à traiter le script redirige vers un autre script.
 
Je sais pas si je suis très clair...


---------------
♈ ♋ ♌ ♍ ♎ ♏ - Agora Fidelio | Galerie d'art Toulousaine
Reply

Marsh Posté le 27-09-2006 à 14:24:46    

Oki jai compris...
 
Car le truc c'est que là je suis sous free donc set_time_limit on oubli et php.ini je pense pas avoir accés ;)
 
j_lecruel>> pas de souci j'ai compris.
j'avais eu un peu une idée similaire. Mais je voulais etre sur qu'il n'y avait pas de soluce facile à côté :D
Je vais donc exploirer cette voie ;)
 
merci les gars.

Reply

Marsh Posté le 02-10-2006 à 10:03:29    

Bonjour, mon script en presque fini, juste un souci ergonomique.
 
Je souhaite quand meme indiquer à lutilisateur d'ou en est le chargement, un truc simple style:
 
Photo 3 in progress... 2 restantes ....
 
Puis
 
Photo 4 in progress... 1 restante ....
 
Mais si je mamuse a afficher des données, mon petit header location en PHP, va tirer la gueule.
 
Sinon je peux faire une page vide, le chargement tourne, je recharge ma page sur une page avec un tag html de reload en 1-2 sec avec le message...
 
Mais ça fait vite beaucoup de rechargement.
 
Si vous avez une soluce, Merci

Reply

Marsh Posté le 02-10-2006 à 10:58:12    

Tu fais le contraire sinon, t'affiches les photos que tu vas traiter à la fin:
header()
echo Après redirection, 186 photos restantes à traiter

Reply

Marsh Posté le 02-10-2006 à 10:58:12   

Reply

Marsh Posté le 02-10-2006 à 11:59:06    

Mais un header() ne marche que si il n'y a rien ecrit avant lui...
 
Donc aprés mon echo, je fais quoi ?

Reply

Marsh Posté le 02-10-2006 à 12:39:36    

Ben tu fais un refresh en laissant 2 ou 3 secondes d'affichage  ce qui laisse le temps de voir le message avant que ça change de page

Reply

Marsh Posté le 02-10-2006 à 19:38:04    

xtof_83 a écrit :

oki doki...Merci pour l'info...
 
Mais c'est la seule solution?
 
Il y a pas un moyen de lui dire, ceci est un prosessus propre qui bugue pas.


 
 
Tu peux éxecuter ton script Php sous forme de daemon.

Reply

Marsh Posté le 02-10-2006 à 20:54:57    

gooopil>> okay ça rejoint mon idée de départ, qui fait au final beaucoup de rafraichisement...Merci ;)
 
supermofo>> oki je vais m'interesser sur ça. (Meme si je pense pas que je peu faire ça sur mon type de serveur)

Message cité 1 fois
Message édité par xtof_83 le 02-10-2006 à 20:57:32
Reply

Marsh Posté le 02-10-2006 à 22:25:29    

xtof_83 a écrit :

gooopil>> okay ça rejoint mon idée de départ, qui fait au final beaucoup de rafraichisement...Merci ;)
 
supermofo>> oki je vais m'interesser sur ça. (Meme si je pense pas que je peu faire ça sur mon type de serveur)


Sinon un peu d'"ajax" pour faire bouger ta barre d'avancement et son texte :)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed