Как запустить файл .bat из PHP?
-
08-07-2019 - |
Вопрос
Кто-нибудь может сказать мне, как выполнить файл .bat из PHP-скрипта?
Я пытался:
exec("C:\[path to file]");
system("C:\[path to file]");
Ничего не работает.Я проверил руководства по PHP и погуглил, но не могу найти хорошего ответа.Кто-нибудь знает, где я ошибаюсь?
Я запускаю Windows 2003 Server и успешно вручную запустил файл .bat, и он делает то, что мне нужно;Мне просто нужно иметь возможность запустить его программно.
Решение
Вам может потребоваться запустить его через cmd
, например:
system("cmd /c C:[path to file]");
Другие советы
<?php
exec('c:\WINDOWS\system32\cmd.exe /c START C:\Program Files\VideoLAN\VLC\vlc.bat');
?>
Когда вы используете функцию exec ()
, вы как будто открыли терминал cmd
и набираете команды прямо к нему.
Используйте одинарные кавычки, такие как $ str = exec ('start / B Path \ to \ batch.bat');
/ B
означает, что летучая мышь будет выполняться в фоновом режиме, поэтому остальная часть php будет продолжена после запуска этой строки, в отличие от < code> $ str = exec ('команда start / B / C', $ result); где команда
выполняется, а затем result
сохраняется для дальнейшего использования.
PS: работает как для Windows, так и для Linux.
Более подробную информацию можно найти здесь http://www.php.net/manual/en/function.exec. .php :)
<?php
pclose(popen("start /B test.bat", "r")); die();
?>
на моем компьютере с Windows 8, работающем под управлением IIS 8, я могу запустить командный файл, просто введя имя летучих мышей и забыв путь к нему. Или положить бит в C: \ Windows \ System32 не спрашивайте меня, как это работает, но это делает. LOL
$ test = shell_exec (" C: \ windows \ system32 \ cmd.exe / c $ streamnumX.bat ");
Этот фрагмент взят из рабочего кода.
Вы можете запустить bat-файл не только из графического интерфейса Windows или планировщика задач, но и непосредственно из PHP-скрипта, когда вам это нужно.Но в большинстве случаев он будет выполняться в течение 30-60 секунд.в зависимости от вашей конфигурации PHP.Если задание в BAT-файле длинное, и вы не хотите замораживать свои PHP-скрипты, вам нужно разветвить BAT-задание как другой процесс, используя php.exe
и не быть надежным от Apache.
Это работает в предыстория режим в Windows, рассматриваемый как отдельные процессы cmd.exe
и php.exe
из диспетчера задач не останавливаются ваши PHP-скрипты Apache.Сообщения, созданные вашим скриптом, могут быть сохранены и извлечены обратно с помощью файлов журнала.
В моем случае в 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));
}
ЛЕТУЧАЯ МЫШЬ
@echo Off
D:\PHP\php.exe D:\Web\example.com\tasks\file_scanner.php > D:\Web\example.com\tasks\file_scanner.log
exit