[英]How to enable pcntl in php ( while using a framework like Symfony2 )
c:\xampp\htdocs\login>php app/console server:start
此命令需要pcntl
扩展才能运行。
这是我尝试在symfony2
环境中启动 Web 服务器时遇到的错误。
我通过使用以下命令找到了一个修复程序:
$ php app/console server:run
但是有人知道为什么server:start
在我的桌面上不起作用吗? 提前致谢。
我的目标是:
启动 Web 服务器
使用 PHP 的内置 Web 服务器运行 Symfony 应用程序就像执行server:start
命令一样简单:
$ php app/console server:start
您无法在 Windows 上安装pcntl
扩展。 根据 PHP 文档:
注意:此扩展在 Windows 平台上不可用。
尝试使用Vagrant或带有 Linux 发行版(如Ubuntu 、 Debian或Mint)的普通虚拟机。
首先,在您的主目录中输入命令行:
mkdir php
cd php
apt-get source php5
cd php5-(WHATEVER_RELEASE)/ext/pcntl
phpize
./configure
make
然后这样做:
cp modules/pcntl.so /usr/lib/php5/WHEVER_YOUR_SO_FILES_ARE/
echo "extension=pcntl.so" > /etc/php5/conf.d/pcntl.ini
完成的!
有一种方法可以将 PCNTL 编译为扩展并将其链接到现有的 PHP 构建中,但这有点深入。
我在 Mac OSX Snow Leopard(64 位)上使用 MAMP 和 PHP 版本 5.3.6 执行以下操作。 如果您的版本不同,请记住在以下行中更改 PHP 版本号!
请注意, make
是必需的,它在 Mac OSX 上默认不安装。 您需要通过 Mac 开发人员工具安装它, http://developer.apple.com/unix/
首先,下载与您在 MAMP 中使用的版本相匹配的 PHP 源代码的 tar(例如,我的是 5.3.6),您可以在http://www.php.net/releases/ 执行此操作。 解压和 CD 到php-[version]/ext/pcntl ,例如:
$ wget http://museum.php.net/php5/php-5.3.6.tar.gz
$ tar xvf php-5.3.6.tar.gz
$ cd php-5.3.6/ext/pcntl
然后需要在pcntl目录下运行phpize
,这是MAMP自带的一个二进制文件:
pcntl$ /Applications/MAMP/bin/php/php5.3.6/bin/phpize
这会创建一堆准备编译扩展所需的文件。
我们现在需要添加一些标志来告诉它编译具有双 32 位和 64 位架构的库,因为 MAMP PHP 是这样构建的。 如果不这样做,编译的共享对象将无法工作。
pcntl$ MACOSX_DEPLOYMENT_TARGET=10.6
pcntl$ CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"
pcntl$ CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
pcntl$ CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
pcntl$ LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"
pcntl$ export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET
然后我们可以运行./configure
和make
来构建我们的共享对象:
pcntl$ ./configure
pcntl$ make
这pcntl.so
在模块目录中放置一个名为pcntl.so
的文件。 将此文件复制到 MAMP 的 PHP 扩展目录:
pcntl$ cp modules/pcntl.so /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/
最后,编辑 PHP INI 文件以包含扩展名:
$ echo "extension=pcntl.so" >> /Applications/MAMP/bin/php/php5.3.6/conf/php.ini
现在应该启用 PCNTL。 要检查它是否已添加,只需运行:
$ /Applications/MAMP/bin/php/php5.3.6/bin/php --ri pcntl
pcntl
pcntl support => enabled
如果你看到了,那就成功了!
对于 Windows:
对于 UNIX 操作系统:
对于 Mac:
其他信息:
php-extension-library github有几个 pcntl.so 文件,您可以轻松下载这些文件以适用于您的 PHP 版本并添加到您的扩展和 .ini 中。
例如,对于 php 版本 7.3.9:
我编写了以下脚本来在我们的 Ubuntu 系统上安装 Apache 的 pcntl 扩展,它至少适用于 Ubuntu 16,我预计也适用于 Ubuntu 18,以及其他具有类似 PHP/Apache 打包/安装布局的发行版:
#! /bin/bash
php_ver=$(php -r 'print(join(".",array_slice(explode(".",phpversion()), 0, 2)));')
php_api_ver=$(php-config --phpapi)
pkg="php$php_ver"
mods_dir=/usr/lib/php/$php_api_ver/
php_conf_dir=/etc/php/$php_ver/apache2/conf.d
set -e
work_dir=/tmp/php-pcntl
rm -rf $work_dir
mkdir -p $work_dir
cd $work_dir
apt-get source $pkg
cd $pkg-$php_ver.*/ext/pcntl
phpize
./configure
make -j 8
sudo cp modules/pcntl.so $mods_dir
echo "extension=pcntl.so" | sudo tee $php_conf_dir/10-pcntl.ini > /dev/null
echo "pcntl extension installed, now restart Apache and make sure it really works"
除了常规的 Apache/PHP 安装之外,您可能还需要注意一些先决条件: apt-get install php-dev php-cli
,然后编辑您的/etc/apt/sources.list
并确保适当的deb-src
行没有注释,运行apt-get update
。 然后你可以运行脚本,它应该负责安装。 如果一切正常, rm -rf /tmp/php-pcntl
- 我有意rm -rf /tmp/php-pcntl
一步排除在脚本之外,以防出现问题并且我需要调试该目录的内容。
请注意,您需要确保您的php.ini
不会使用disable_functions=
禁用您感兴趣的功能。 例如,在 Ubuntu 16 pcntl_signal()
以及其他一些被显式的php.ini
指令禁用。
您可以像这样使用docker-php-extension-installer :
# Dockerfile
ADD https://raw.githubusercontent.com/mlocati/docker-php-extension-installer/master/install-php-extensions /usr/local/bin/
RUN chmod uga+x /usr/local/bin/install-php-extensions && sync && install-php-extensions pcntl
然后在你的 php.ini 中激活扩展:
extension=pcntl.so
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.