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

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

我试图设置一个PHP触发器文件,将引发一个后台进程。 (看这个问题 )

我正在Windows Wampserver环境中执行此操作。

所以例如我有trigger.php运行exec函数,调用我的backgroundProcess.php来parsing和执行。

然而,问题是我的trigger.php文件正在等待exec()命令在停止之前完成运行backgroundProcess.php 。 后台进程运行大约20-30秒,并且trigger.php一直在等待,直到backgroundProcess.php完成。

这是有道理的吗? 这里是运行exec()命令的trigger.php文件

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只是触发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);

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

没有解决scheme为我工作。 PHP一直在等待响应。

find解决scheme是:

$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:发布相同的回复到另一个线程( 在Windows机器上的PHP;开始进程在后台 ),因为这两个链接帮助我做了很多的研究。

从手册: http : //www.php.net/manual/en/function.exec.php

注意:

如果一个程序是用这个函数启动的,为了继续在后台运行,程序的输出必须被redirect到一个文件或者另一个输出stream。 如果不这样做将导致PHP挂起,直到程序执行结束。

和我回答的一个类似的问题: 调用另一个PHP脚本,并在其他脚本完成之前将控制权返回给用户

您可能需要更改实施方法。 不得不等待这么长的时间对于你的应用程序的用户来说是一个烦恼,而对于整个应用程序来说却是致命的。

对于这样的任务,通常最好将任务排队,最好是在数据库上,并定期处理它们。 在基于Linux的系统上有时钟作业。 在Windows中,您可以使用调度程序启动backgroundProcess.php。

当在redirect到NUL:的Windows环境中使用exec()时,很可能是这样的NUL: 。 /dev/null是一个* nix空文件。

除了上面的Rohit的回答,我编辑了他的解决scheme在Windows 10 PHP 7.0.3上工作:

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值