22

我正在尝试使用 pcntl_fork() 分叉一个命令行运行 XAMPP php 进程。当我运行以下命令时:

$pid = pcntl_fork();
if($pid == -1){
    file_put_contents('testlog.log',"\r\nFork Test",FILE_APPEND);
    return 1; //error
}
else if($pid){
    return 0; //success
}
else{   
    file_put_contents($log, 'Running...', FILE_APPEND);
}

我得到:

Fatal error: Call to undefined function pcntl_fork()

谁能建议如何解决这个问题?

4

4 回答 4

33

当 PHP 用作 Apache 模块(例如 XAMPP)时,不能使用函数 'pcntl_fork'。您只能在 CGI 模式或命令行中使用 pcntl_fork。

使用此功能将导致:'Fatal error: Call to undefined function: pcntl_fork()'

来源: http: //php.net/manual/en/function.pcntl-fork.php

于 2013-12-09T14:13:41.887 回答
11

要查看它是否已安装,请运行:

php -i | grep pcntl

如果它存在并启用,则可能禁用 pcntl 功能,这似乎是较新的 PHP 5.x 安装中的默认设置。要检查,请运行:

php -i | grep disable_functions

如果您看到 pcntl_* 函数列表,则需要编辑 php.ini 文件(在 XAMPP 内部)并注释掉该行disable_functions=

我建议你使用这个OS X 的 PHP 发行版,它有当前版本,我可以确认确实有pcntl扩展。

于 2013-11-11T15:51:10.753 回答
3

pcntl_*函数,默认情况下未启用 PHP 中的过程控制支持。--enable-pcntl在编译 PHP 以启用过程控制支持时,您必须使用配置选项编译 PHP 的 CGI 或 CLI 版本(不用作 Apache 模块) 。

目前,此模块无法在非 Unix 平台(Windows) 上运行。

参考

于 2018-06-06T03:41:41.843 回答
1

在将脚本作为 Apache 的一部分运行时,我遇到了同样的问题。所以,我的解决方案是将包含的代码pcntl_fork放在不同的文件中(让我们称之为fork.php)并使用exec()它来运行它,如下所示:

mainFile.php(这是 Apache 将运行的)

exec('php fork.php',$output);

fork.php

$pid = pcntl_fork();
if($pid == -1){
    file_put_contents('testlog.log',"\r\nFork Test",FILE_APPEND);
    return 1; //error
}
else if($pid){
    return 0; //success
}
else{   
    file_put_contents($log, 'Running...', FILE_APPEND);
}
于 2020-03-19T17:02:40.653 回答