pcntl_fork () возвращается, фатальная ошибка: вызов неопределенной функции pcntl_fork ()

Я пытаюсь разветвить командную строку для запуска процесса PHP XAMPP с помощью pcntl_fork (). Когда я запускаю команду ниже:

$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()

Кто-нибудь может подсказать, как это исправить?


person Ben Pearce    schedule 30.05.2013    source источник
comment
Какая у вас ОС? Имейте в виду, что в Windows нет системных *fork() системных вызовов.   -  person Eugen Rieck    schedule 30.05.2013
comment
Вы успешно установили php5-pcntl?   -  person Eugen Rieck    schedule 30.05.2013
comment
Нет, я не понимал, что это нужно установить отдельно от XAMPP.   -  person Ben Pearce    schedule 30.05.2013
comment
Это. Если вы установили PHP через MacPorts, попробуйте port install php5-pcntl   -  person Eugen Rieck    schedule 30.05.2013
comment
Извините, я пропустил часть XAMPP. Виноват.   -  person Eugen Rieck    schedule 30.05.2013


Ответы (4)


Невозможно использовать функцию pcntl_fork, когда PHP используется как модуль Apache (например, XAMPP). Вы можете использовать pcntl_fork только в режиме CGI или из командной строки.

Использование этой функции приведет к: 'Fatal error: Call to undefined function: pcntl_fork()'

Источник: http://php.net/manual/en/function.pcntl-fork.php

person Andrea    schedule 09.12.2013
comment
Кроме того, OP должен учитывать curl_multi_exec при запуске с веб-страницы. - person Volomike; 31.03.2018

Чтобы узнать, установлен ли он, запустите:

php -i | grep pcntl

Если он присутствует и включен, то функция pcntl, вероятно, отключена, что, по-видимому, используется по умолчанию в новых установках PHP 5.x. Чтобы проверить, запустите:

php -i | grep disable_functions

Если вы видите список функций pcntl_ *, вам нужно отредактировать файл php.ini (внутри XAMPP) и закомментировать строку disable_functions=

Я бы рекомендовал вам использовать этот дистрибутив PHP для OS X, у которого есть текущие версии, и я могу подтвердить имеет расширение pcntl.

person Stuart Carnie    schedule 11.11.2013
comment
Комментировать disabled_functions = для меня было непросто. # ubuntu1404 # php7.1 - person Jacksonkr; 10.03.2017
comment
disable_functions вернуть warning о причине безопасности; ни fatal ошибка о неопределенной функции. - person Nabi K.A.Z.; 06.06.2018

pcntl_*, поддержка Process Control в PHP по умолчанию отключена. Вы должны скомпилировать версию PHP CGI или CLI (не используемую в качестве модуля Apache) с параметром конфигурации --enable-pcntl при компиляции PHP, чтобы включить поддержку Process Control.

В настоящее время этот модуль не будет работать на платформах, отличных от Unix (Windows).

ref

person Nabi K.A.Z.    schedule 06.06.2018

У меня была такая же проблема при запуске скрипта в составе 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);
}
person JVE999    schedule 19.03.2020