Этот фрагмент взят из рабочего кода.
Вы можете запускать 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