我有点遗憾地问这个问题,因为我知道在此之前已经询问了很多次,但是我发现的所有答案都不适用于我的情况。要么我正在做一些根本性错误的事情,要么我正在尝试做一些不可能的事情。从Windows的浏览器在后台运行PHP进程
我需要能够从通过Web浏览器访问的PHP文件(由运行在Windows上的Apache Web服务器提供服务)分离后台进程。我需要前台进程完成,因此浏览器停止等待服务器,而分叉进程在后台继续。我正在使用PHP 5.3。
我已经试了无数建议的解决方案都具有不同的失败程度:
shell_exec('D:\php5.3\php.exe sleep.php > out 2>out2');
无论是通过运行命令行,或通过浏览器,前台进程没有完成,直到后台一个没有。添加在年底“&”似乎没有任何区别
pclose(popen("start D:\php5.3\php.exe sleep.php","r"));
这一个细微的工作,通过命令行,但是当通过浏览器访问,它等待前台和后台进程来完成。
exec("nohup D:/php5.3/php.exe -f sleep.php > out 2>out2");
这似乎并没有在所有
$commandString = "start /b D:/php5.3/php.exe d:\\webroot\\other\\tests\\sleep.php";
pclose(popen($commandString, 'r'));
在命令行努力工作,等待在浏览器
$WshShell = new COM("WScript.Shell");
$oExec = $WshShell->Run("D:/php5.3/php-win.exe -f d:\\webroot\\other\\tests\\sleep.php", 0, false);
都没有工作 - 努力叉时挂新的过程。
任何人都可以帮忙吗?我错过了一些非常明显的东西?!
我知道我可以将任务放在数据库中并批量运行,但我需要尽可能接近实时地运行,因此不想通过将事情排入队列来引入更多延迟每分钟只能运行一次。
我不认为在Windows中可用?从我读过的文章来看,它在Apache/Web服务器环境中非常不礼貌? – Mayb2Moro 2012-07-30 20:53:29
我过去曾经使用它,但主要是为了产生一堆儿童班来执行负载测试。我严格在Linux环境中,所以不知道它适用于Windows。 – 2012-07-30 20:56:54