php - 如何在 PHP 中启用 pcntl(同时使用像 Symfony 2 这样的框架)

标签 php symfony

考虑:

cd c:\xampp\htdocs\login
php app/console server:start

此命令需要 pcntl 扩展才能运行。

这是我在 Symfony 中尝试启动 Web 服务器时遇到的错误2环境...

我通过使用以下命令找到了修复:

php app/console server:run

但为什么 server:start 在我的桌面上不起作用?

我的目标是:

  1. 启动网络服务器

  2. 使用 PHP 的内置 Web 服务器运行 Symfony 应用程序就像执行 server:start 命令一样简单:

    php app/console server:start
    

最佳答案

在 Windows 上

您不能在 Windows 上安装 pcntl 扩展。 According to the PHP documentation :

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

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


在 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 上

取自 an answer to How can I enable process control extension (PCNTL) in PHP MAMP? !

有一种方法可以将 PCNTL 编译为扩展并将其链接到现有的 PHP 构建中,但它有点深入。

我在 Mac OS X v10.6(雪豹)(64 位)上使用 MAMP 和 PHP 版本 5.3.6 执行以下操作。如果您的不同,请记住在以下行中更改 PHP 版本号!

请注意 make必需的,它在 Mac OS X 上没有默认安装。您需要通过 Mac 开发人员工具安装它, http://developer.apple.com/unix/ .

首先,下载与您在 MAMP 中使用的版本相匹配的 PHP 源代码的 tar(例如,我的版本是 5.3.6),您可以在 Unsupported Historical 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,pcntl是MAMP自带的二进制文件:

/Applications/MAMP/bin/php/php5.3.6/bin/phpize

这会创建一堆文件,这些文件是准备编译扩展所需的。

我们现在需要添加一些标志来告诉它使用双 32 位和 64 位架构编译库,因为 MAMP PHP 是通过这种方式构建的。如果不这样做,编译后的共享对象将无法工作。

MACOSX_DEPLOYMENT_TARGET=10.6
CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp"
CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe"
LDFLAGS="-arch i386 -arch x86_64 -bind_at_load"
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET

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

./configure
make

这会在 modules 目录中放置一个名为 pcntl.so 的文件。将此文件复制到您的 MAMP 的 PHP 扩展目录:

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 操作系统:

对于苹果机:

其他信息:

关于php - 如何在 PHP 中启用 pcntl(同时使用像 Symfony 2 这样的框架),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33036773/

相关文章:

symfony - Assetic dump 为不同的 Symfony2 项目使用相同的 tmp 文件夹

Php mysql left join no result 问题

php - password_verify 正在返回 true

mysql - 无法使用 Doctrine 和 Symfony2 在 MySQL 中创建表

Symfony 5 服务未加载

php - 唯一约束返回类型不匹配

php - 我在哪里保存 Zend_Form 文件?

php - PHP 中速记比较的动态计数

php - 使用 mysql 和 codeigniter 检查 sum(amount) 的条件

symfony - Doctrine/Symfony2 OneToManyforeign_id 保存为 NULL