繁体   English   中英

如何在 php 中启用 pcntl(同时使用像 Symfony2 这样的框架)

[英]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 上

您无法在 Windows 上安装pcntl扩展。 根据 PHP 文档

注意:此扩展在 Windows 平台上不可用。

尝试使用Vagrant或带有 Linux 发行版(如UbuntuDebianMint)的普通虚拟机。


在 UNIX 上

首先,在您的主目录中输入命令行:

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

完成的!


在 Mac 上

摘自https://stackoverflow.com/a/8432855/5157221

有一种方法可以将 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

然后我们可以运行./configuremake来构建我们的共享对象:

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:

其他信息:

您的系统中缺少pcntl扩展名。 这是php-cli包的一部分,因此您只需要执行以下操作:

sudo apt-get install php-cli

检查文档以获取更多信息

php-extension-library github有几个 pcntl.so 文件,您可以轻松下载这些文件以适用于您的 PHP 版本并添加到您的扩展和 .ini 中。

例如,对于 php 版本 7.3.9:

  1. 从这里直接从这里的 repo下载pcntl.so
  2. pcntl.so文件移动到扩展(例如: /Applications/MAMP/bin/php/php7.3.9/lib/php/extensions/no-debug-non-zts-xxxxxxxx
  3. extension=pcntl.so添加到您的.ini

我编写了以下脚本来在我们的 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

您可以像这样使用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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM