我've had no problems installing Symfony 2.2.x using Composer, I'总是刚刚复制了http://symfony.com/download的稳定版本 .
composer create-project symfony/framework-standard-edition myproject/ 2.2.1
(我在全球安装了Composer)
好奇的2.3.0-RC1我认为这将顺利进行:
composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1
但是由于以下错误而关闭:
Your requirements could not be resolved to an installable set of packages.
Problem 1
- symfony/icu v1.2.0-RC1 requires lib-icu >=4.4 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/icu v1.1.0-RC1 requires lib-icu >=3.8 -> the requested linked library icu has the wrong version installed or is missing from your system, make sure to have the extension providing it.
- symfony/symfony v2.3.0-RC1 requires symfony/icu >=1.0,<2.0 -> satisfiable by symfony/icu[v1.1.0-RC1, v1.2.0-RC1].
- Installation request for symfony/symfony 2.3.* -> satisfiable by symfony/symfony[v2.3.0-RC1].
我需要调整composer.json文件吗?
解决方案更新
我错过了提供lib-icu的php intl扩展
如此简单,安装和配置intl扩展 . 从PHP 5.3开始,Intl扩展默认是分发的,但是像MAMP这样的一些发行版需要获取它 . 我用 PEAR :
My steps:
-
安装Intl扩展(由PECL维护):
$ pear install pecl/intl
- 您可能必须首先将pecl通道添加到pear . -
If you use MAMP 并且从未使用过pear / pecl check lullabot's helpful blog post; MAMP不附带php源代码,所以你必须download the source for your php version并将源代码移动到
/Applications/MAMP/bin/php/php[version]/include/php
(如博客文章中所述) -
PEAR找不到我的php.ini,所以我不得不手动将
extension=intl.so
添加到php.ini . 在MAMP中,您可以通过转到文件>编辑模板> php . [版本] .ini轻松编辑php.ini
Command Line:
-
当使用Composer或Symfony时's Console CLI you'也需要Intl,因为
php
CLI通常使用不同的php.ini
你'll want to add the extension directive there too. To find your CLI'的php.ini只需要$ php -i |grep php\.ini
来发现文件路径并将extension=intl.so
添加到该php.ini中 . -
要检查是否已安装Intl,您可以执行
$ php -m
以检查可用模块 .
6 回答
更新你的 php-intl 扩展名,这就是icu错误的来源!
检查扩展是否已启用并在php.ini中正确配置 .
(提示:php-cli有时使用不同的php.ini)
php.ini
如果已成功启用扩展,请检查终端中的
phpinfo()
和php -m
.从php检查当前的intl版本:
attention: not needed anymore (symfony 2.3同时发布)
请将最小稳定性标志@dev或@rc添加到您的依赖项中,如下所示:
作曲家的默认稳定性是稳定的,symfony 2.3分支当前不是(它是@rc) . 阅读更多稳定性标志here .
许多应用程序只支持"en"语言环境,不需要翻译功能或php-intl . 如果是你,或者你无法在服务器上安装php-intl,你可以明确地将symfony/icu~1.0添加到你的
composer.json
. 1.0不需要php-intl,而1.1则需要php-intl .如果您不需要翻译功能:
没有这个声明并尝试安装symfony / symfony 2.3 Composer可能会尝试安装symfony / icu~1.2,这需要你安装php-intl .
Symfony Intl Component's docs下的Symfony Intl Component's docs更明确地涵盖了这一点 .
有关此问题或类似问题的解决方案可在此处找到:ICU and Deployment Problems
作曲家的行为应该是智能选择正确的icu组件:
安装symfony 2.3应该(理论上)没有错误 . 没有intl-extension .
但是,当您的开发环境与本文中提到的 生产环境 服务器不同时,您可能会陷入困境:
如果您没有对 生产环境 服务器的root访问权限,则可以按照本文中的说明进行修复 . (调整composer.json)
希望这些额外的信息有所帮助,因为它帮助了我在不同环境下的特殊情况 .
Mac OS Mavericks附带PHP 5.4.17而没有intl . 要实现这一点,您必须遵循以下步骤:
我知道这个答案可能不是这个人问题的正确答案,但它是我的问题的解决方案 . 通过在php.ini中启用intl扩展并升级composer,我能够自己解决这个问题 .
升级作曲家 .
从这一行删除评论(在php.ini中):
并删除注释(php.ini)中[intl]下面的这两行:
然后重新启动apache2 . :)
Additional Information:
如果你的使用mac并使用Homebrew安装php请按照下列步骤操作:
(PHP 5.4)
(PHP 5.5)
重启apache .
更好的解决方案是将composer.json修复为 生产环境 服务器所需的版本 . 首先,确定服务器上的ICU版本:1 2
然后将composer.json文件中的Icu组件修复为匹配的版本:
将版本设置为“1.0." if the server does not have the intl extension installed; " 1.1” . 如果服务器是使用ICU 4.2或更低版本编译的 .
最后,跑
在您的开发机器上,进行广泛测试并再次部署 . 现在,依赖项的安装将成功 .