pcntl_fork()返回,致命错误:调用未定义的函数pcntl_fork()

时间:2013-05-30 01:29:38

标签: php fork command-line-interface pcntl undefined-function

我正在尝试使用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 个答案:

答案 0 :(得分:27)

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

使用此函数将导致:'致命错误:调用未定义的函数:pcntl_fork()'

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

答案 1 :(得分:9)

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

php -i | grep pcntl

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

php -i | grep disable_functions

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

我建议您使用PHP的this distribution for OS X,它有当前版本,我可以确认是否有pcntl扩展名。

答案 2 :(得分:1)

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

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

ref

答案 3 :(得分: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);
}