Par Nicolas SUPRIN, samedi 25 mars 2006 à 19:43 | PHP | #36 | rss
Cette astuce permet de lancer une commande quelconque en arrière plan sur un serveur sous Windows.
Rappel
Dans un script PHP je souhaite lancer l'exécution d'une commande qui demande pas mal de temps d'exécution. Si j'appelle cette commande en faisant exec (ou passthru), php est bloqué, et attend la fin d'exécution de la commande. Ce qui à pour conséquence d'avoir une page qui met un temps infini à se charger.
Solution
Sous Unix, c'est très simple, il suffit de d'indiquer au système d'exécuter la commande en tant que tache d'arrière plan, en terminant la ligne de commande par le caractère &.
Le problème, c'est que sous Windows, cet astuce ne fonctionne pas.
Je n'ai pas trouvé d'autre moyen que d'utiliser la commande psexec. Cette commande permet de lancer des commande de différentes façons, dont une qui permet de ne pas attendre la fin de l'application
Il faut donc copier le fichier psexec.exe dans le répertoire %WINDIR%\system32 du serveur web (ce répertoire est par défaut dans le PATH).
Dans le script PHP, l'appel ce procède de cette manière :
passthru('psexec \\\\127.0.0.1 -d calc.exe') // par exemple
- \\127.0.0.1 indique que l'appel doit se faire sur la machine locale (dans la code PHP les anti-slash sont protégés)
- le paramètre -d indique à psexec de ne pas attendre la fin de la commande
Plus d'info sur la commande psexec sur sysinternals.com.





Aucun commentaire pour le moment.
Aucun trackback.
Pour faire un trackback sur ce billet : http://www.blog.cactuscrew.com/tb.php?id=36&chk=hzudy3