考虑:
cd c:'xampp'htdocs'login
php app/console server:start
此命令需要 pcntl
扩展才能运行。
这是我尝试在我的Symfony 2环境中启动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发行版(如Ubuntu,Debian或Mint(的普通虚拟机。
<小时 />在 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 上
摘自如何在 PHP MAMP 中启用进程控制扩展 (PCNTL( 的答案?!
有一种方法可以将PCNTL编译为扩展并将其链接到现有的PHP构建中,但它有点深入。
我在Mac OS X v10.6(Snow Leopard((64位(上使用MAMP和PHP版本5.3.6执行以下操作。请记住在以下行中更改PHP版本号,如果您的版本号不同!
请注意,make
是必需的,默认情况下不会在 Mac OS X 上安装。您需要通过Mac开发人员工具安装它,http://developer.apple.com/unix/。
首先,下载与您在 MAMP 中使用的版本匹配的 PHP 源代码的 tar(例如,我的版本是 5.3.6(,您可以在不支持的历史版本中执行此操作。Untar 和 cd to 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 附带的二进制文件:
/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
然后,我们可以运行./configure
和make
来构建我们的共享对象:
./configure
make
这会将一个名为 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 中安装 PCNTL 扩展?
- 在简单测试中使用 proc_open(( 而不是 pcntl_fork((
对于 Unix 操作系统:
- http://www.crimulus.com/2010/07/30/howto-enable-pcntl-in-ubuntu-php-installations/
对于 Mac:
- 如何在 PHP MAMP 中启用进程控制扩展 (PCNTL(?
- 安装适用于 PHP 的 PCNTL 模块而无需重新编译
其他信息:
- [DX] 如果服务器:启动缺少 pcntl #12153,则显示一条消息
GitHub 上的 php-extension-library 有几个 pcntl.so 文件,您可以轻松下载这些文件,并添加到您的扩展和.ini文件中。
例如,对于 PHP 版本 7.3.9:
- 从存储库下载
pcntl.so
此处或直接下载 此处. - 将
pcntl.so
文件移动到扩展名(例如:/Applications/MAMP/bin/php/php7.3.9/lib/php/extensions/no-debug-non-zts-xxxxxxxx
( - 将
extension=pcntl.so
添加到您的.ini
对于 Docker
你可以像这样使用 docker-php-extension-installer:
# Dockerfile
ADD https://github.com/mlocati/docker-php-extension-installer/releases/latest/download/install-php-extensions /usr/local/bin/
RUN chmod +x /usr/local/bin/install-php-extensions && '
install-php-extensions pcntl
然后激活 php.ini 文件中的扩展名:
extension=pcntl.so
您的系统中缺少pcntl
扩展。这是php-cli
包的一部分,因此您只需要执行以下操作:
sudo apt-get install php-cli
有关详细信息,请查看文档。
我编写了以下脚本来在我们的 Ubuntu 系统上安装 Apache 的 pcntl 扩展,它至少适用于 Ubuntu 16.04(Xenial Xerus(,我预计也将适用于 Ubuntu 18.04(仿生海狸(,以及其他具有类似 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
- 我故意将这一步排除在脚本之外,以防出现问题并且我需要调试该目录的内容。
请注意,您需要确保您的php.ini
不会禁用您感兴趣的功能,disable_functions=
. 例如,在 Ubuntu 16.04 上,pcntl_signal()
和其他一些功能都通过明确的 php.ini
指令被禁用。
目前没有在 Windows 机器中启用pcntl
的选项。根据关于 pcntl 的 php 官方文档
查看有关 pcntl 的 php 官方文档