PHP: pcntl_fork() в командной строке OSX

У меня MacBook Pro под управлением OSX Yosemite. Я пытаюсь запустить простой скрипт PHP, используя pcntl_fork() в командной строке (команда: php pcntl.php):

<?php
    $pid = pcntl_fork();

    switch($pid) {
        case -1:
            print "Could not fork!\n";
            exit;
        case 0:
            print "In child!\n";
            break;
        default:
            print "In parent!\n";
    }
?>

Ответ таков:

Неустранимая ошибка: вызов неопределенной функции pcntl_fork() в
/Users/grant/Desktop/test/pcntl.php в строке 2

Я видел множество статей, в которых показано, как установить pcntl, если вы используете mamp, но если вы просто используете терминал, как бы вы решили установить pcntl? Если это невозможно в командной строке, есть ли что-то похожее в PHP, которое работает?

1 ответ

Решение

В случае нативного CLI вы должны действовать так же, как и в случае MAMP, Разница лишь в том, что вы должны добавить поддержку родного php и не MAMPодин.

YosemitePHP не имеет pcntl служба поддержки. Следующая команда не возвращает ничего:

$ php -i | grep pcntl

Проверьте версию php:

$ php -v
  PHP 5.5.20 (cli) (built: Feb 25 2015 23:30:53)

Скачать и собрать pcntl модуль:

$ wget http://php.net/distributions/php-5.5.20.tar.xz
$ tar xf php-5.5.20.tar.xz
$ cd php-5.5.20
$ cd ext/pcntl/
$ phpize
$ ./configure
$ make

Скопируйте модуль в папку расширений:

$ sudo cp modules/pcntl.so /usr/lib/php/extensions/no-debug-non-zts-20121212/

редактировать php.ini конфигурационный файл:

$ sudo vi /etc/php.ini

И добавить extension=pcntl.so линия в Dynamic Extensions раздел, например:

;;;;;;;;;;;;;;;;;;;;;;
; Dynamic Extensions ;
;;;;;;;;;;;;;;;;;;;;;;

; If you wish to have an extension loaded automatically, use the following
; syntax:
;
;   extension=modulename.extension
;
; For example, on Windows:
;
;   extension=msql.dll
;
; ... or under UNIX:
;
;   extension=msql.so
;
; ... or with a path:
;
;   extension=/path/to/extension/msql.so
;
; If you only provide the name of the extension, PHP will look for it in its
; default extension directory.

extension=pcntl.so

проверить pcntl поддержка снова (поддержка включена на этот раз):

$ php -i | grep pcntl
  pcntl
  pcntl support => enabled

Запуск вашего тестового скрипта:

$ php -f test.php
  In parent!
  In child!
Другие вопросы по тегам