PHP:OSX命令行上的pcntl_fork()

Gra*_*ant 0 php macos command-line-interface pcntl

我有一台运行OSX Yosemite的Macbook Pro.我试图pcntl_fork()在命令行上运行一个简单的PHP脚本(命令:) 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";
    }
?>
Run Code Online (Sandbox Code Playgroud)

答案是这样的:

致命错误:
在第2行的/Users/grant/Desktop/test/pcntl.php中调用未定义的函数pcntl_fork()

我已经看过很多文章,告诉你如果你运行mamp如何安装pcntl,但如果你只是使用终端,你会如何安装pcntl?如果在命令行中无法做到这一点,PHP中是否有类似的功能?

baf*_*baf 6

在本机CLI的情况下,您应该采用与情况相同的方式MAMP.唯一的区别是你应该添加对本机的支持php而不是对它的支持MAMP.

Yosemite的PHP没有pcntl支持.以下命令不返回任何输出:

$ php -i | grep pcntl
Run Code Online (Sandbox Code Playgroud)

验证您的PHP版本:

$ php -v
  PHP 5.5.20 (cli) (built: Feb 25 2015 23:30:53)
Run Code Online (Sandbox Code Playgroud)

下载和构建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
Run Code Online (Sandbox Code Playgroud)

将模块复制到extensions文件夹:

$ sudo cp modules/pcntl.so /usr/lib/php/extensions/no-debug-non-zts-20121212/
Run Code Online (Sandbox Code Playgroud)

编辑php.ini配置文件:

$ sudo vi /etc/php.ini
Run Code Online (Sandbox Code Playgroud)

extension=pcntl.soDynamic 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
Run Code Online (Sandbox Code Playgroud)

pcntl再次验证支持(此时支持启用):

$ php -i | grep pcntl
  pcntl
  pcntl support => enabled
Run Code Online (Sandbox Code Playgroud)

运行测试脚本:

$ php -f test.php
  In parent!
  In child!
Run Code Online (Sandbox Code Playgroud)