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)
试图在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;后台启动过程),因为这两个链接帮助我做了很多研究.