Pages: 1
- Sujet précédent - Lancement .bat pour requetes geographiques en tache de fond - Sujet suivant
#1 Mon 15 March 2010 19:10
- yteb
- Participant occasionnel
- Date d'inscription: 25 Jun 2007
- Messages: 22
Lancement .bat pour requetes geographiques en tache de fond
Bonjour à tous,
Bon c'est la panique, je suis déjà très en retard sur mon projet et je suis bloqué depuis 2 jours...Voila mon probleme :
J'ai un script php qui lance un fichier .bat à la fin. Je fais cela car le fichier .bat lancé contient de nombreuses commandes sql pour ma base postgresql/poqtgis qui peuvent prendre plusieurs heures (elle contient de nombreux traitements geographiques assez lourds). Vu que mes premiers lancements du .bat par un simple exec n'aboutissait pas j'aimerais essayer une petite feinte :
- lancer le fichier .bat independemment de ma page php
- rediriger ma page sur une page de chargement avec par exemple un gif de load qui tourne
- une fois que les traitements du .bat sont effectués, reprendre la navigation normale en chargeant la page suivante
Mais je n'arrive pas a lancer le .bat de maniere independante. J'ai bien essayé de mettre des NULL: ou NULL (équivalent du & de linux) dans la commande exec ou d'autre script trouvé sur différents forum mais rien n'y fait !!!! HELPPPPP
Bref si quelqu'un avait une petite idée ca me sauverait vraiment la vie car l'echeance est toute proche !!!
Merci d'avance
Hors ligne
#2 Mon 15 March 2010 21:59
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
Re: Lancement .bat pour requetes geographiques en tache de fond
Bonsoir,
Si c'est la panique alors je pense qu'il faut donner encore plus de précision, voire des extraits de code du .bat et du fichier php.
Car personnellement , je ne crois pas avoir tout compris.
Si ca peut aider voici un bout de code php qui execute un .bat avec un flush qui attend la fin de l'exécution du .bat avant d'afficher la fin de la page.
Code:
flush(); $executer = "start execut2.bat "; exec($executer);
si le .bat est long à executer, je crois me souvenir qu'il faut paramettrer php et lui indiquer une durée maximale d'exécution.
A bientôt,
Dernière modification par ppluvinet (Mon 15 March 2010 22:04)
Pascal PLUVINET
Hors ligne
#3 Mon 15 March 2010 23:08
- yteb
- Participant occasionnel
- Date d'inscription: 25 Jun 2007
- Messages: 22
Re: Lancement .bat pour requetes geographiques en tache de fond
Bonsoir ppluvinet,
En effet un bout de code peut aider :-)...Voici l'appel du .bat qui pose probleme dans le code php
Code:
exec("C:\\ms4w\\Apache\\htdocs\\PREDIT_v1.0\\sig\\batch\\traitement_points_structurants.bat");
Quant au code contenu dans le .bat, je repete plusieurs fois cette operation :
Code:
@ECHO OFF REM lancement des traitements cd C:\Program Files\PostgreSQL\8.3\bin psql -U postgres PREDIT < C:\ms4w\Apache\htdocs\PREDIT_v1.0\sig\batch\traitement_points_structurants.sql :ALL_DONE
Le .bat fonctionne lorsque je le lance manuellement. Mais si je passe par un bouton sur ma page php, alors il finit par m'afficher un vieux "internal server error" car les traitements sont trop long pour le server apache. Pour ce que tu disais, il existe en effet un parametrage dans le php.ini qui permet de regler le timing max des requetes. Je l'ai deja modifie mais cela ne change rien.
Si vous avez besoin de plus d'info n'hesitez pas.
Merci d'avance
Hors ligne
#4 Tue 16 March 2010 08:41
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
Re: Lancement .bat pour requetes geographiques en tache de fond
Pour avoir une idée, quelle est la durée de l'execution du .bat ? 5minutes, 1heure, 1 journée?
As-tu essayer avec un traitement de moins d'une minute?
As-tu la possibilité de faire un fichier LOG?
Dans ton fichier SQL, il y a sans doute plusieurs requetes, n'est-ce pas? Est-ce que la première partie s'execute?
Modifie encore le parametre dans php.ini, relance le serveur apache et utilise peut-être le bout de code que j'ai posté hier?
Ca me parait bizarre ton histoire...Mais tu vas y arriver..
Pascal PLUVINET
Hors ligne
#5 Tue 16 March 2010 08:57
- yteb
- Participant occasionnel
- Date d'inscription: 25 Jun 2007
- Messages: 22
Re: Lancement .bat pour requetes geographiques en tache de fond
Bonjour ppluvinet,
Pret pour une nouvelle journee de combat!!!
Pour ce qui est de tes interrogations : Le .bat peut prendre environ 1h et cela ne pose pas de problème pour les traitements plus courts. Quant au fichier log, il y est inscrit :
"Premature end of script headers: php-cgi.exe, referer: http://localhost/PREDIT_v1.0/pages/nouveau_reseau/page_5_parametres_1.php"
Si je lance le .bat a la "main", il s'execute sans probleme. Si j'utilise la commande exec pour un traitement plus court, il n'y a pas de probleme non plus. J'ai vraiment l'impression que le script php qui est envoyé et qui contient la commande exec bloque tant que le traitement contenu dans la commande exec n'est pas réalisé...et du coup je me retrouve avec internal server error et une belle page blanche...
J'avais une piste avec l'ajout de "&" a la fin de la commande exec mais apparement il s'agit d'une commande pour linux et je suis sur windows xp.
J'aimerais du coup que le batch se lance en tache de fond et que je bascule vers une page de chargement...
Hors ligne
#6 Tue 16 March 2010 09:16
- ppluvinet
- Participant assidu
- Lieu: VALENCE
- Date d'inscription: 6 Aug 2007
- Messages: 617
Re: Lancement .bat pour requetes geographiques en tache de fond
Ca fait un peu longtemps que j'ai pas fait de php.
Essai de mettre avant le exec
Code:
flush();
et fait un echo après l'exec avec un message du style : traitement fini.
Sinon,
L'idée peut être aussi de faire plusieurs exec et donc d'exploser ton fichier SQL.
Courage !
Pascal PLUVINET
Hors ligne
#7 Wed 24 March 2010 09:59
- yteb
- Participant occasionnel
- Date d'inscription: 25 Jun 2007
- Messages: 22
Re: Lancement .bat pour requetes geographiques en tache de fond
Bon au final apres nombre d'essais infructeux je me suis rabatu sur une solution pas tres propre mais qui m'a debloqué en attendant. En fait je fais juste appel en commande a l'explorateur windows en specifiant le chemin et le fichier et il propose d'executer mon bat, cette fois ci independamment du server. Par contre si l'utilisateur clic sur annuler ou enregistrer, ben c'est la loose...Si j'ai le temps de trouver mieux je vous retiens au courant..
Merci pour vos contributions et a bientot
Hors ligne
Pages: 1
- Sujet précédent - Lancement .bat pour requetes geographiques en tache de fond - Sujet suivant