在使用php的pcntl_fork()时,我注意到从CLI执行得到了正确的结果,但是当我从apache执行它时,它给出了异常‘未定义函数pcntl_fork()’。
是的,我读到通过apache执行是不够安全的!
我的问题:
是否有任何工作可以让我通过apache执行具有pcntl_fork()实现的php脚本? 为什么首先通过apache执行分叉并不安全,但是在CLI中足够安全呢?
发布于 2013-10-16 10:18:39
例如,如果您希望脚本在用户取消页面请求(在浏览器上按“停止”或“后退”或“刷新”等)之后继续运行,那么您可能需要考虑ignore_user_abort http://www.php.net/manual/en/function.ignore-user-abort.php。
至于为什么不允许它从apache中分叉,这是因为PHP与Apache的接口方式。我在这方面没有很深的知识可以详细解释,但可能是这样的:
如果您使用mod_php,Apache会为每个请求生成一个新的PHP进程。这意味着apache需要跟踪每个进程,并在请求结束后终止该进程。
然而,对于mod_fcgi和其他程序(我认为),一个process产生于几个请求,这意味着该进程将继续运行并接受新的请求。然而,为了控制内存泄漏,这些子PHP进程会周期性地被杀死。
现在,如果您试图在这些PHP进程子进程中生成一个新的进程,坦白地说,我不知道会发生什么。最有可能的是,产生的过程不会被杀死并继续占用资源。
https://stackoverflow.com/questions/19400299
复制相似问题