PHP exec()作为后台进程(Windows Wampserver环境)

Emm*_*uel 25 php exec background-process

我正在尝试设置一个将触发后台进程的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 &');
Run Code Online (Sandbox Code Playgroud)

基本上,我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);
Run Code Online (Sandbox Code Playgroud)

Emm*_*uel 26

使用以下命令解决问题:

$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);
Run Code Online (Sandbox Code Playgroud)

  • 它被删除了!无论如何,这里是我写的`exec("CMD/C在这里启动你的命令")的摘要; 我认为/ C参数开关不是必需的,但我只是更加确定.如果要在脚本的当前目录中执行,请使用dirname(__ FILE__)作为命令的前缀.这只有在Windows机器上存在启动命令时才有效 (2认同)

Roh*_*hit 9

试图在PHP 5.2.8的Windows 2000服务器上实现相同的功能.

这些解决方案都不适合我.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
Run Code Online (Sandbox Code Playgroud)

ps:将相同的回复发布到另一个线程(Windows机器上的PHP;后台启动过程),因为这两个链接帮助我做了很多研究.