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

Ous*_*ama 12 php symfony

c:\xampp\htdocs\login>php app/console server:start
Run Code Online (Sandbox Code Playgroud)

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

这是我尝试在我的symfony2环境中启动Web服务器时出现的错误.

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

$ php app/console server:run
Run Code Online (Sandbox Code Playgroud)

但有人知道为什么server:start我的桌面不起作用?提前致谢.

我的目标是:

启动Web服务器

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

$ php app/console server:start
Run Code Online (Sandbox Code Playgroud)

Sur*_*yaa 11

在Windows上

您无法pcntl在Windows上安装扩展程序.根据PHP文档:

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

尝试使用Vagrant或普通虚拟机与Linux发行,如Ubuntu,DebianMint.


在UNIX上

首先,在主目录中键入命令行:

mkdir php
cd php
apt-get source php5
cd php5-(WHATEVER_RELEASE)/ext/pcntl
phpize
./configure
make
Run Code Online (Sandbox Code Playgroud)

然后这样做:

cp modules/pcntl.so /usr/lib/php5/WHEVER_YOUR_SO_FILES_ARE/
echo "extension=pcntl.so" > /etc/php5/conf.d/pcntl.ini
Run Code Online (Sandbox Code Playgroud)

完了!


在Mac上

取自/sf/answers/590299881/!

有一种方法可以将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/上找到它.Untar和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
Run Code Online (Sandbox Code Playgroud)

然后,您需要phpize在pcntl目录中运行,该目录是MAMP附带的二进制文件:

pcntl$ /Applications/MAMP/bin/php/php5.3.6/bin/phpize
Run Code Online (Sandbox Code Playgroud)

这会创建一组准备扩展以进行编译所需的文件.

我们现在需要添加一些标志来告诉它使用双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
Run Code Online (Sandbox Code Playgroud)

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

pcntl$ ./configure
pcntl$ make
Run Code Online (Sandbox Code Playgroud)

这会将一个pcntl.somodules目录中调用的文件放入.将此文件复制到MAMP的PHP扩展目录:

pcntl$ cp modules/pcntl.so /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/
Run Code Online (Sandbox Code Playgroud)

最后,编辑PHP INI文件以包含扩展名:

$ echo "extension=pcntl.so" >> /Applications/MAMP/bin/php/php5.3.6/conf/php.ini
Run Code Online (Sandbox Code Playgroud)

现在应该启用PCNTL.要检查是否已添加,只需运行:

$ /Applications/MAMP/bin/php/php5.3.6/bin/php --ri pcntl

pcntl

pcntl support => enabled
Run Code Online (Sandbox Code Playgroud)

如果你看到了,那就有用了!


有用的资源

对于Windows:

对于UNIX操作系统:

对于Mac:

其他信息:

  • 答案很可靠 - 但我认为如果你把你的资源放在每个摘录附近并明确阻止引用那些摘录会有所帮助.正如所写,我认为有人可以提出不使用块引用格式的情况是不诚实的. (2认同)

jrq*_*ick 5

GitHub 上的php -extension-library有几个 pcntl.so 文件,您可以轻松下载适合您的 PHP 版本的文件并将其添加到您的扩展和.ini文件中。

例如,对于 PHP 版本 7.3.9:

  1. 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


Tom*_*ski 4

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

sudo apt-get install php-cli
Run Code Online (Sandbox Code Playgroud)

查看文档以获取更多信息。