1

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

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

我的问题:

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

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

4

1 回答 1

0

例如,如果您希望脚本在用户取消页面请求后继续运行(在浏览器上按“停止”或“返回”或“刷新”等),那么您可能需要考虑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 子进程中生成一个新进程,坦率地说,我不知道会发生什么。产生的进程很可能不会被杀死并继续占用资源。

于 2013-10-16T10:18:39.437 回答