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

问题描述:

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

我需要管道和返回值。

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

而且我对AJAX不知道,我觉得可能的Gearman工作,但它也许有点复杂。

我已经解决了这个由开始一个新的PHP来实现我的请求。 http://www.php.net/manual/en/function.proc-open.php#90584

+0

此链接不被提供。 – Meglio 2014-01-08 17:12:08

PHP是单线程的设计。当HTTP请求完成时,没有办法让PHP进程继续运行。

说了这么多,你可以利用AJAX做你想做什么。而不是有一个HTTP请求,同时触发两个请求。其中一个将包含漫长的过程(以及set_time_limit(0))。

有很多不同的方法来做到这一点。我通常做的是:当我收到初始请求时,立即回应一个包含自动AJAX调用的HTML页面,该页面包含长进程的第二个php文件。所以每个人都很开心:用户可以立即看到回应,而漫长的过程可能需要时间,因为没有人在等待。

+0

Thanks.But我现在不知道。 – power 2012-02-11 14:11:17

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

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

+0

Thanks.I将尝试此操作。 – power 2012-02-11 14:10:39

尝试,如果你的问题是由这个回答看到:http://nsaunders.wordpress.com/2007/01/12/running-a-background-process-in-php/

+0

对不起,这对我来说不起作用。因为我运行的是windows操作系统,而且我需要管道将数据传输到进程的STDIN并获得STDOUT,STDERR并获取它的返回值。 – power 2012-02-11 14:59:04