web-dev-qa-db-fra.com

Comment exécuter un fichier .bat à partir de PHP?

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.

41
undefined

Vous devrez peut-être l'exécuter via cmd, par exemple:

system("cmd /c C:[path to file]");
52
RichieHindle
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
10
mysoogal

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);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 :)

9
Migisha
<?php
 pclose(popen("start /B test.bat", "r")); die();
?> 
7
testaa

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");

1
calmchess

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
0
Alex Khimich