Quelqu'un peut-il me dire comment exécuter un fichier .bat à partir d'un script PHP?
J'ai essayé:
exec("C:\[path to file]");
system("C:\[path to file]");
Rien ne marche. J'ai vérifié les manuels PHP et googlé mais je ne trouve pas de bonne réponse. Quelqu'un sait où je me trompe?
J'exécute Windows 2003 Server et j'ai réussi à exécuter manuellement le fichier .bat et il fait ce dont j'ai besoin; J'ai juste besoin de pouvoir le lancer par programme.
Vous devrez peut-être l'exécuter via cmd
, par exemple:
system("cmd /c C:[path to file]");
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
Lorsque vous utilisez la fonction exec()
, c'est comme si vous aviez un terminal cmd
ouvert et que vous tapez directement des commandes.
Utilisez des guillemets simples comme celui-ci $str = exec('start /B Path\to\batch.bat');
Le /B
Signifie que la batte sera exécutée en arrière-plan de sorte que le reste de la php continuera après avoir exécuté cette ligne, par opposition à $str = exec('start /B /C command', $result);
où command
est exécuté, puis result
est stocké pour une utilisation ultérieure.
PS: Cela fonctionne pour Windows et Linux.
Plus de détails sont ici http://www.php.net/manual/en/function.exec.php :)
<?php
pclose(popen("start /B test.bat", "r")); die();
?>
sur ma machine Windows 8 exécutant IIS 8 je peux exécuter le fichier batch simplement en mettant le nom des chauves-souris et en oubliant le chemin d'accès. Ou en mettant la chauve-souris dans c:\windows\system32 don me demande pas comment ça marche mais ça marche. LOL
$ test = Shell_exec ("C:\windows\system32\cmd.exe/c $ streamnumX.bat");
Cet extrait provient du code de travail.
Vous pouvez déclencher le fichier bat non seulement à partir de l'interface graphique Windows ou du Planificateur de tâches, mais directement à partir de PHP lorsque vous en avez besoin. Mais dans la plupart des cas, il sera exécuté pendant 30 à 60 secondes en fonction de votre PHP configuration. Si le travail dans le fichier BAT est long et que vous ne voulez pas geler vos scripts PHP, vous devez bifurquer le travail BAT comme un autre processus utilisant php.exe
Et ne pas être fiable à partir d'Apache.
Cela fonctionne dans contexte sous Windows, considéré comme des processus distincts cmd.exe
et php.exe
du Gestionnaire des tâches n'interrompant pas vos scripts Apache PHP. Les messages produits par votre script peuvent être stockés et récupéré via des fichiers journaux.
Dans mon cas dans file_scanner.php
Je fais de gros calculs en boucle pour un grand tableau de fichiers qui peut durer quelques heures avec la fonction php sleep()
pour ne pas surcharger le CPU.
Le succès poiner résulte du fichier $r
Que vous pouvez interroger via ajax si vous voulez connaître le succès ou le démarrage défectueux. Dans mon cas, file_scanner.php
Écrit un fichier journal avec des messages somefile.jpg - OK
Que vous pouvez charger dans votre interface utilisateur avec AJAX toutes les quelques secondes pour afficher la progression.
PHP
/**
* Runs bat file in background mode
*
*/
function run_scanner() {
$c='start /b D:\Web\example.com\tasks\file_scanner.bat';
$r=pclose(popen($c, 'r'));
return json_encode(array('result'=>$r));
}
BAT
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit