Вопрос

Кто-нибудь может сказать мне, как выполнить файл .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
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top