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
один.
Yosemite
PHP не имеет 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!