如何通过 apache 执行 pcntl 函数


How to execute pcntl functions via apache

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

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

我的问题 :

有什么解决方法可以让我通过 apache 执行具有 pcntl_fork() 实现的 php 脚本吗?

为什么首先通过 apache 执行分叉不安全,但从 CLI 足够安全?

例如

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

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

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

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

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