Lancer un programme sans attendre son retour

Eléphant du PHP | 441 Messages

25 sept. 2006, 10:09

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:
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

Administrateur PHPfrance
Administrateur PHPfrance | 3131 Messages

25 sept. 2006, 11:09

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>'".

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

25 sept. 2006, 13:02

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()
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène

Eléphant du PHP | 441 Messages

26 sept. 2006, 12:01

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
Futures Stars par ici >> www.apel-doorn.com
fan d'info et du ... PSG !! :D
Apprendre, comprendre et maîtriser telle est ma devise!
Fan inconditionnel de netvibes

Modérateur PHPfrance
Modérateur PHPfrance | 2575 Messages

26 sept. 2006, 12:27

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)
--------//////----//---//----//////
-------//---//----//---//----//---//
------//////----//////-----//////
-----||--------||--||---||
Prendre le recul n'est pas une perte de temps.


ps: Affrontez moi dans l'arène