Page 1 sur 1

Lancer un programme sans attendre son retour

Posté : 25 sept. 2006, 10:09
par starkeus
Bonjour à tous,

derrière ce titre est un peu vaste se cache un problème pour moi :?

Voilà je dois lancer une procédure stockée depuis une application web (PHP / Adodb). Le problème est que je ne dois pas attendre le retour de cette procédure car elle est très longue (>4h) or le timeout apache est de 5 minutes. Je dois donc absolument la lancer en asynchrone en quelque sorte.

Auriez-vous quelques pistes?
J'ai pensé à un sh, au trigger etc...mais j'ai bien peur que je ne puisse pas exécuter cela en asynchrone. Est-ce qu'on faire ça en PHP?

Merci d'avance.
:roll:

Posté : 25 sept. 2006, 11:09
par naholyr
Sous Linux, en ajoutant " &" à la fin de la commande, tu l'exécutes sans attendre le retour.

Sous Windows il faut utiliser "start '<ma commande>'".

Posté : 25 sept. 2006, 13:02
par sadeq
Sous php aussi on peut exécuter un script silencieux (batch) par la ligne de commande système, sans passer la commande par HTTP.

Exemple:

Code : Tout sélectionner

c:/php5/php.exe c:/mes_progs/script1.php
Cette commande exécute le programme "script1.php".

Remarques qu'on peut programmer l'exécution d'un batch avec un exec() si l'on souhaite par exemple le démarrer à partir d'un click sur bouton de formulaire.

Exemple :

Code : Tout sélectionner

exec ("c:/php5/php.exe c:/mes_progs/script1.php");
si tu souhaites accèder au buffer d'exécution de la commande et ainsi lire le retour système de ta commande utilises plutôt popen()

Posté : 26 sept. 2006, 12:01
par starkeus
ok merci beaucoup les gars.
Par contre petite question pour la fonction exec() (L'applic est sous unix):
Je vais exécuter un SH situé dans un répertoire de mon application web (exemple: www/mon_appli/bd/script.sh)
Au niveau du chemin, est-ce que je vais devoir préciser tout le chemin?
ou pourrais-je seulement faire :
exec ("bd/script.sh &");
Merci d'avance

Posté : 26 sept. 2006, 12:27
par sadeq
Oui bien sûr tu peux :wink: c'est le serveur qui determine le chemin absolu quand un chemin relatif lui est fourni (le cas classique quoi)