2013-10-16 70 views
0

我正在解决php的pcntl_fork(),我注意到从CLI执行我得到了正确的结果,但是当我从apache执行它时,它给了我例外'未定义的函数pcntl_fork() '如何通过Apache执行pcntl函数

是的,我读通过Apache执行不够安全!

我的问题:

有什么解决办法,让我通过Apache执行有PHP脚本pcntl_fork()实现?

为什么首先通过apache执行分叉并不安全,但是从CLI中安全地执行?

回答

0

如果,例如,您希望脚本继续运行即使在用户取消了页面请求(按下“停止”在他们的浏览器或“后退”或“刷新”等),那么你可能想考虑ignore_user_aborthttp://www.php.net/manual/en/function.ignore-user-abort.php

至于为什么不允许从apache分支,这是因为PHP如何与Apache接口。我没有深入的了解这方面的细节,但可能是这样的:

如果你使用mod_php,Apache会为每个请求产生一个新的PHP进程。这意味着apache需要跟踪每个进程并在请求结束后终止进程。

但是对于mod_fcgi和其他(我认为),一个PHP进程会产生几个请求,这意味着进程将继续运行并接受新的请求。但是为了控制内存泄漏,这些PHP子进程被定期终止。

现在,如果你尝试在这些PHP进程中产生一个新的进程,坦白地说,我不知道会发生什么。这个过程最有可能不会被杀死,并继续占用资源。

相关问题