PHP exec () в качестве фонового процесса (Windows Wampserver Environment)

Я пытаюсь установить файл запуска php, который запустит фоновый процесс. (см. этот вопрос )

Я делаю это в среде Windows Wampserver.

Так, например, у меня есть trigger.php который запускает функцию exec, которая требует, чтобы мой backgroundProcess.php анализировался и выполнялся.

Однако проблема в том, что мой файл trigger.php ждет, когда команда exec() завершит выполнение backgroundProcess.php до его остановки. Фоновый процесс длится около 20-30 секунд, и trigger.php ждет все это время до тех пор, пока backgroundProcess.php не закончит полностью.

Это имеет смысл? Вот файл trigger.php который запускает команду exec()

 exec('C:\wamp\bin\php\php'.phpversion().'\php.exe -f C:\path\to\backgroundProcess.php > C:\wamp\bin\php\php'.phpversion().'\dev\null &'); 

В принципе, я хочу, чтобы trigger.php просто trigger.php backgroundProcess и не ждал, пока он закончит.


РЕДАКТИРОВАТЬ

Проблема решена с помощью следующей команды:

 $WshShell = new COM("WScript.Shell"); $oExec = $WshShell->Run("C:\wamp\bin\php\phpVERSIONNUMBER\php-win.exe -f C:/wamp/www/path/to/backgroundProcess.php", 0, false); 

Проблема решена с помощью следующей команды:

 $WshShell = new COM("WScript.Shell"); $oExec = $WshShell->Run("C:\wamp\bin\php\phpVERSIONNUMBER\php-win.exe -f C:/wamp/www/path/to/backgroundProcess.php", 0, false); 

Пытался добиться того же самого на сервере Windows 2000 с PHP 5.2.8.

Ни один из решений не работал для меня. PHP продолжал ждать ответа.

Найдено решение:

 $cmd = "E:\PHP_folder_path\php.exe E:\some_folder_path\backgroundProcess.php"; pclose(popen("start /B ". $cmd, "a")); // mode = "a" since I had some logs to edit 

ps: отправка того же ответа на другой поток ( PHP на машине Windows, запуск процесса в фоновом режиме ), поскольку эти 2 ссылки помогли мне много сделать некоторые исследования по этому вопросу.

Из руководства: http://www.php.net/manual/en/function.exec.php

Заметка:

Если программа запускается с этой функцией, чтобы она продолжала работать в фоновом режиме, выход программы должен быть перенаправлен в файл или другой выходной поток. В противном случае PHP зависнет до завершения программы.

И аналогичный вопрос, на который я ответил: вызовите еще один PHP-скрипт и верните управление пользователю до того, как завершится другой скрипт

Возможно, вам придется изменить свой подход к внедрению. Подождать так долго было бы досадой для пользователя вашего приложения и фатальным для всего приложения.

Для таких задач обычно лучше ставить очередь задачи, в идеале на базу данных, и обрабатывать их периодически. В системах на базе Linux есть хронологические задания. В Windows вы можете использовать планировщик для запуска backgroundProcess.php.

Вполне возможно, что при использовании exec() в среде Windows перенаправление на NUL: /dev/null – это нулевой файл * nix.

В дополнение к ответу Rohit выше, я отредактировал его решение для работы с Windows 10 PHP 7.0.3:

 pclose(popen("start /B ". $cmd, "w"));