proc_open()运行一个进程让PHP等待它完成?

时间:2012-02-11 08:07:53

标签: php process

我在windows7上使用XAMPP 1.7.7。(PHP版本5.3.8) 我使用proc_open()运行一个进程,并希望重定向到另一个网页, 但PHP将等到该过程完成。 我不希望正在运行的进程让我的网站等待它。 我该怎么办?

我需要管道和返回值。

我需要什么: 用户在页面A中提交内容,然后Web将重定向到页面B(用户可以离开页面B)。 同时调用一些进程,产生一些结果并更新 数据库,所以当用户刷新页面B时,将显示正确的结果。 而且,用户可以随时查看页面B. 我注意到克里斯对PHP Manual的评论,他的方法可以运行一个过程 与PHP独立。但我不知道如何在隐藏进程上使用管道或获取 返回值。

我对AJAX一无所知,我认为Gearman可能有用,但它可能有点复杂。

4 个答案:

答案 0 :(得分:0)

PHP是单线程设计。在HTTP请求完成后,无法让php进程运行。

话虽如此,你可以利用AJAX来做你想做的事。而不是一个HTTP请求,同时触发两个请求。其中一个将包含漫长的过程(以及set_time_limit(0))。

有很多不同的方法可以做到这一点。我通常做的是:当我收到初始请求时,我立即回复一个HTML页面,其中包含对包含长进程的第二个php文件的自动AJAX调用。所以每个人都很高兴:用户看到立即响应,漫长的过程可以花费时间,因为没有人在等待。

答案 1 :(得分:0)

这应该使用Gearman之类的作业队列来完成,这样您就可以让工作人员继续运行,然后在您重定向到的页面中查询它的状态。

要在Windows上安装Gearman,请参阅此前的SO问题和答案:How to configure or install GEARMAN in windows OS?

答案 2 :(得分:0)

答案 3 :(得分:0)

我已经通过启动一个新的PHP来实现我的请求来解决这个问题。 http://www.php.net/manual/en/function.proc-open.php#90584