如何通过apache执行pcntl函数

时间:2013-10-16 09:55:21

标签: php apache pcntl

我正在使用php的pcntl_fork(),我注意到从CLI执行我得到了正确的结果但是当我从apache执行它时它给了我异常'未定义的函数pcntl_fork()'

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

我的问题:

  

是否有任何解决方法让我通过apache执行具有pcntl_fork()实现的php脚本?

     

为什么首先通过apache执行分叉是不安全的,但是从CLI开始安全吗?

1 个答案:

答案 0 :(得分:0)

例如,如果您希望脚本在用户取消页面请求后(在浏览器上按“停止”或“返回”或“刷新”等)继续运行,那么您可能需要考虑{{ 1}} http://www.php.net/manual/en/function.ignore-user-abort.php

至于为何不允许从apache派生,这是因为PHP与Apache的接口方式。我在这方面没有深入的知识来详细解释,但它可能是这样的:

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

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

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