Eviter le timeout en actualisant - PHP - Programmation
Marsh Posté le 12-03-2009 à 17:42:21
hé bien si tu dépasses
t'as
l'erreur 500 pour le plantage
l'erreur 503 pour server busy
errordocument 500 -> rafraichissement js toute les 15 sec ..
Marsh Posté le 12-03-2009 à 18:06:06
et pourquoi ne pas lancer ce lourd traitement via exec("php.exe Script.php" ) ?
Marsh Posté le 12-03-2009 à 18:13:07
PHP n'est pas fait pour effectuer de gros calculs lourds, et si tes requêtes sont effectivement plus longues que le timeout de PHP, c'est qu'il y a un problème au niveau de ta façon de procéder. Essaye de voir ce que tu peux optimiser (tu peux éventuellement poster les requêtes concernées ou le traitement effectué).
A coté de cela, dépendant de l'itération que tu fais, tu peux mémoriser via des sessions la "position" où tu es dans tes calculs, faire un reload, puis reprendre là où tu en étais. Mais à nouveau, ce n'est sans doute pas l'idéal (surtout que, si le traitement est lourd et qu'il implique une base de données, tu consommes un slot de connexion à cette BDD durant un temps relativement important).
Marsh Posté le 17-03-2009 à 10:51:17
Ducoup je me suis lancé dans l'exec(), afin d'executer les differentes parties de mon script tranquilement, et pouvoir afficher un avancement a l'utilisateur, c'est la que je me heurte a un second probleme.
Car mon but n'est pas d'executer le tout en tache de fond (pourquoi utiliser exec me diriez vous), mais d'executer les parties de mon script les unes a la suite des autres, et afficher des messages a l'utilisateur, de type STEP 1 : Done.
$commande = "/usr/local/bin/php.ORIG.5 ".getcwd()."/export_step2.php > dev/null &";
exec($commande);
Mon probleme est pour recuperer qqchose de ce script step2, en mettant un tableau $output en parametre de exec, ca ne donne rien, mon tableau est vide, meme si j'ai des return dans mon step2. Apres dans step2 je fesait
$_SESSION['done']=true;
et dans step 1
while(!isset($_SESSION['done']))
{}
echo"STEP 2 : Done";
Mais ca ne donne rien, je ne sais pas comment les faire "communiquer".
Toute aide est la bienvenue.
Merci
Marsh Posté le 12-03-2009 à 16:48:11
Bonjour,
Je fait des requetes assez lourdes en php, qui prennent un certain temps, donc pour eviter un eventuel time out du server, je peut rafraichir ma page, en passant "l'endroit" ou j'en était (dans ma boucle) en session.
Le probleme est que, j'ai du code, des requetes vers ma bdd, puis une boucle asser lourde, puis de nouveau du code.
Something like that :
# Code
# Code
@ Ma boucle tres longue
# Code
# Code
Je ne souhaite pas réefectuer mes # Code lorsque je rafraichit ma page pour alleger ma boucle.
Je ne sais pas comment me debrouiller pour actualiser ma page afin d'eviter un timeout causé par @ ma boucle, sans réexecuter mes # Code, qui font des appels a la bdd, et qui prennent un certain temps, d'un autre coté je ne peut pas tout simplement ne pas les ignorer, car je me sert des resultat dans @maboucle..
Je sais que c'est pas tres clair, et je m'en excuse.
Merci d'avance