PHP: pcntl_fork() 在 OSX 命令行
PHP: pcntl_fork() on the OSX command line
我有一台 Macbook Pro 运行宁 OSX Yosemite。我正在尝试在命令行上使用 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";
}
?>
回复是这样的:
Fatal error: Call to undefined function pcntl_fork() in
/Users/grant/Desktop/test/pcntl.php on line 2
如果您是 运行ning mamp,我看过很多文章向您展示如何安装 pcntl,但如果您只是使用终端,您将如何安装 pcntl?如果这在命令行上是不可能的,那么 PHP 中是否有类似的东西可以工作?
对于本机 CLI,您应该按照与 MAMP
相同的方式进行操作。唯一的区别是您应该添加对本机 php
的支持,而不是 MAMP
的支持。
Yosemite
的 php 没有 pcntl
支持。以下命令 returns 无输出:
$ 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
并在 Dynamic Extensions
部分添加 extension=pcntl.so
行,例如:
;;;;;;;;;;;;;;;;;;;;;;
; 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!
我有一台 Macbook Pro 运行宁 OSX Yosemite。我正在尝试在命令行上使用 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";
}
?>
回复是这样的:
Fatal error: Call to undefined function pcntl_fork() in
/Users/grant/Desktop/test/pcntl.php on line 2
如果您是 运行ning mamp,我看过很多文章向您展示如何安装 pcntl,但如果您只是使用终端,您将如何安装 pcntl?如果这在命令行上是不可能的,那么 PHP 中是否有类似的东西可以工作?
对于本机 CLI,您应该按照与 MAMP
相同的方式进行操作。唯一的区别是您应该添加对本机 php
的支持,而不是 MAMP
的支持。
Yosemite
的 php 没有 pcntl
支持。以下命令 returns 无输出:
$ 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
并在 Dynamic Extensions
部分添加 extension=pcntl.so
行,例如:
;;;;;;;;;;;;;;;;;;;;;;
; 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!