Как вы запускаете .bat файл из PHP? - PullRequest
40 голосов
/ 07 мая 2009

Может кто-нибудь сказать мне, как выполнить файл .bat из сценария PHP?

Я пробовал:

exec("C:\[path to file]");
system("C:\[path to file]");

Ничего не работает. Я проверил руководства по PHP и погуглил, но не могу найти хорошего ответа. Кто-нибудь знает, где я иду не так?

Я использую Windows 2003 Server и успешно запустил файл .bat вручную, и он делает то, что мне нужно; Мне просто нужно иметь возможность запустить его программно.

Ответы [ 6 ]

51 голосов
/ 07 мая 2009

Возможно, вам потребуется запустить его через cmd, например:

system("cmd /c C:[path to file]");
10 голосов
/ 27 октября 2009
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
9 голосов
/ 01 июня 2013

Когда вы используете функцию exec(), это как если бы вы открыли терминал cmd и набираете команды прямо к нему.

Используйте одинарные кавычки, как это $str = exec('start /B Path\to\batch.bat');
/B означает, что летучая мышь будет выполняться в фоновом режиме, поэтому остальные php будут продолжены после выполнения этой строки, в отличие от $str = exec('start /B /C command', $result); command выполняется, а затем result сохраняется для последующего использования.

PS: Работает как для Windows, так и для Linux.
Подробнее здесь http://www.php.net/manual/en/function.exec.php:)

7 голосов
/ 08 сентября 2012
<?php
 pclose(popen("start /B test.bat", "r")); die();
?> 
1 голос
/ 28 апреля 2013

на моем компьютере с Windows 8, работающем под управлением IIS 8, я могу запустить командный файл, просто введя имя летучих мышей и забыв путь к нему. Или положить бит в C: \ Windows \ System32 не спрашивайте меня, как это работает, но это делает. LOL

$ test = shell_exec ("C: \ windows \ system32 \ cmd.exe / c $ streamnumX.bat");

0 голосов
/ 29 мая 2019

Этот фрагмент взят из рабочего кода.

Вы можете запускать bat-файл не только из Windows GUI или Task Scheduler, но и напрямую из PHP-скрипта, когда вам это нужно. Но в большинстве случаев он будет исполняться в течение 30-60 сек. в зависимости от вашей конфигурации PHP. Если задание в BAT-файле длинное и вы не хотите замораживать свои PHP-скрипты, вам нужно преобразовать задание BAT в другой процесс с использованием php.exe и не зависеть от Apache.

Это выполняется в режиме background в Windows, которое рассматривается как отдельные процессы cmd.exe и php.exe из диспетчера задач, которые не останавливают ваши скрипты Apache PHP. Сообщения, созданные вашим сценарием, могут храниться и извлекаться обратно через файлы журнала.

В моем случае в file_scanner.php я выполняю некоторые тяжелые вычисления в цикле для большого массива файлов, которые могут длиться несколько часов с функцией php sleep(), чтобы не перегружать процессор.

Указатель успеха получен из файла $r, который вы можете запросить через ajax, если хотите узнать об успехе или старте. В моем случае file_scanner.php записывает файл журнала с сообщениями somefile.jpg - OK, который вы можете загружать в свой пользовательский интерфейс с помощью AJAX каждые несколько секунд, чтобы показать прогресс.

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