我运行的是Manjaro linux,我已经安装了apache 2.4.10-1与php 5.5.15-1和php-composer 1.0.0.alpha8.458-1。
我想通过这个命令下载带有composer的项目
composer create-project nette/sandbox TaskManager
,但我得到错误的ext-iconv
- nette/neon v2.2.1 requires ext-iconv * -> the requested PHP extension iconv is missing from your system.
- nette/nette v2.2.0 requires ext-iconv * -> the requested PHP extension iconv is missing from your system.
但是在我的php.ini中我已经启用了iconv扩展
extension=iconv.so
.
.
[iconv]
iconv.input_encoding = ISO-8859-1
iconv.internal_encoding = ISO-8859-1
iconv.output_encoding = ISO-8859-1
在我的php脚本中,我可以使用iconv函数没有任何问题。
当我运行php -m时,我看到iconv与其他模块在列表中
你知道哪里有问题吗?
编辑:当我从cli运行php -i时,我得到了这个:
Configuration File (php.ini) Path => /etc/php
Loaded Configuration File => /etc/php/php.ini
Scan this dir for additional .ini files => /etc/php/conf.d
Additional .ini files parsed => (none)
并且在这个配置文件中启用了iconv。
即使我运行
php -d error_reporting=E_ALL -r 'echo iconv("UTF-8", "ASCII//TRANSLIT", "Žluťoučký kůňn");'
正确执行并打印"Zlutoucky kun"
所以我发现,作曲家使用不同的php配置文件,这是存储在
/usr/share/php-composer/php.ini
这里我只是添加了下面一行
extension=iconv.so
一切都工作!
我解决了这个问题,取消了
行的注释ext=iconv
在/etc/php/php.ini 在Centos7的WHM中,它为我工作。
yum install ea-php72-php-iconv
php72
如果您正在使用PHPBrew,请运行以下命令来安装iconv
扩展:
phpbrew ext install iconv
我也在运行Arch(在Manjaro堆栈下,也使用pacman
)
如果php.ini文件声明了正确的扩展名,但您仍然得到错误,请尝试composer
标志--ignore-platform-req=
。在您的情况下,可能是这样的:
composer create-project nette/sandbox TaskManager --ignore-platform-req=ext-iconv
另外,确保你从来没有以root身份运行composer
,而是作为web,然后php
su httpd -c 'php composer create-project nette/sandbox TaskManager --ignore-platform-req=ext-iconv'
如果php
正在执行composer
命令,那么Composer可能会更好地查看更相关的php.ini文件。
在为他人创建自己的项目时,错误警报的倾向是不使用composer
的另一个理由。
请记住,composer
是作为一种"保姆"创建的。自动安装依赖…因为网络管理员不知道如何阅读文档,也不知道自己怎么做,对吧?它主要用于不懂web管理的web开发人员,或者被雇主或客户拒绝访问root
,但只能在堆栈中工作的web开发人员。
由于Composer的目的,它可能会触发许多错误警告。这可能就是为什么它有--ignore-platform-req=
标志的原因。不要害怕使用这一点,因为这是composer
的可取之处之一。