2008-11-25 78 views
7

我正在写一个简单的PHP应用程序,它需要偶尔执行一套相当密集的MySQL更新。我不特别希望这会导致用户延迟,所以我想知道使用pcntl_fork()。在PHP/Apache中分流是一个好主意吗?

我不确定这是如何真正起作用的:虽然父进程完成后子进程会继续运行吗?父进程是否会结束,并且在子进程完成之前用户的页面加载完全?

换句话说,这是一种安全的方式来让PHP脚本(在Apache下运行)在不延迟用户的情况下执行一些耗时的更新,还是应该让用户忍受一些延迟?

+0

请在问题标题中说清楚你的意思是分叉一个过程。我首先想到你想分解这个项目。 – 2008-11-25 15:36:35

回答

3

父进程将结束,用户的页面将全部加载,子进程将继续,并且使用将不会反馈子进程是否成功完成。

1

有人可能会详细告诉你,当你在apache下调用这个函数时会发生什么,但是根据你正在使用的apache和php的版本和组合,你可能会得到并非总是真的答案。你应该使用ajax并有两个请求。回应一次,在页面上显示你在做什么,然后用ajax调用轮询第二次请求状态以及你实际工作的地方。

0

如果PHP在Apache下运行,因为mod_php模块分支根本不起作用,您会收到一条警告,提示函数* pcntl_fork()*未定义。在这种情况下,一个好的解决方案是使用exec(),而不是使用命令行运行单独的php作业。

0

我认为这是一个坏主意。我做了类似的事情,并且Apache将父母的输出重定向到了它的孩子。那就是你的浏览器显示来自其中一个子进程的信息。
点击获得更多信息this
希望它对你有所帮助。

相关问题