web-dev-qa-db-ja.com

pcntl_fork()が戻る、致命的なエラー:未定義の関数pcntl_fork()の呼び出し

私は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()

誰でもこれを修正する方法を提案できますか?

20
Ben Pearce

PHPがApacheモジュール(XAMPPなど)として使用されている場合、関数 'pcntl_fork'を使用することはできません。pcntl_forkは、CGIモードまたはコマンドラインからのみ使用できます。

この関数を使用すると、次の結果になります:'Fatal error: Call to undefined function: pcntl_fork()'

ソース: http://php.net/manual/en/function.pcntl-fork.php

29
Andrea

インストールされているかどうかを確認するには、次のコマンドを実行します。

php -i | grep pcntl

存在し、有効になっている場合、pcntl関数は無効になっている可能性があります。これは、新しいPHP 5.xインストールではデフォルトのようです。確認するには、次のコマンドを実行します。

php -i | grep disable_functions

Pcntl_ *関数のリストが表示された場合は、php.iniファイル(XAMPP内)を編集して、行disable_functions=をコメント化する必要があります。

this distribution of PHP for OS X)を使用することをお勧めします。これには、現在のバージョンがあり、pcntl拡張子があることを確認できます。

10
Stuart Carnie

pcntl_*関数、PHPでのプロセス制御サポートはデフォルトでは有効になっていません。PHP --enable-pcntlコンパイル時の構成オプションPHPプロセス制御サポートを有効にするため。

現在、このモジュールは非UNIXプラットフォーム(Windows)では機能しません。

参照

2
Nabi K.A.Z.

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);
}
_
0
JVE999