Длительный фоновый процесс в PHP на машине Windows

У меня есть скрипт на PHP, который использует Curl, чтобы поразить длинный список URL-адресов один за другим и написать ответ в файл в конце, я хочу, чтобы список был загружен из браузера и выполнить остальную часть обработки в фоновом режиме (без заставляя пользователя ждать ответа). Я уже попробовал следующие решения —

    $command = "C:\wamp\bin\php\php5.5.12\php.exe ../background_process/subscribe_bg.php ".$file_temp_path;
shell_exec(sprintf('%s > /dev/null 2>/dev/null &', $command));

Это успешно запускает скрипт, но заставляет браузер ждать. (Это, вероятно, будет работать в фоновом режиме на машине Linux.)

    $command = "C:\wamp\bin\php\php5.5.12\php.exe ../background_process/subscribe_bg.php ".$file_temp_path;

execInBackground($command);

function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
}
else {
exec($cmd . " > /dev/null &");
}
}

Я нашел это решение для Windows-машины, но у меня не работает. Сценарий не выполняется вообще.

Пожалуйста, предложите лучшую практику для запуска длинного процесса (не очень длинного ~ 30-40 минут) в фоновом режиме с использованием PHP на машине с Windows.

3

Решение

Это прекрасно работает для машины с Windows, где весь вывод скрипта записан в $ response_file_path —

$command = $PHP_DIR." ../background_process/subscribe_bg.php -p=".$file_path_arg." >../sublogs/responses/".$file_response_path." 2>../sublogs/error_logs/err.txt";

execInBackground($command)

function execInBackground($cmd) {
if (substr(php_uname(), 0, 7) == "Windows"){
pclose(popen("start /B ". $cmd, "r"));
return 1;
}
else {
return 0;
//Or the code for linux machine.
}
}
2

Другие решения

Я думаю, что вы должны перенаправить вывод из вашего фонового процесса в другой файл. Поскольку вы не перенаправляете его, PHP ждет его. Добавьте перенаправление ‘>’ в вашу команду:

$command = "C:\wamp\bin\php\php5.5.12\php.exe ../background_process/subscribe_bg.php ".$file_temp_path . " > out.log ";

Удачи!
Данило

0

По вопросам рекламы [email protected]