我使用Composer安装Symfony 2.2.x没有问题,我总是在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文件?
如此简单,安装和配置intl扩展。从PHP 5.3开始,Intl扩展默认是分发的,但是某些发行版(如MAMP)没有Intl,所以你需要获取它。我用 PEAR :
我的步骤:
$ pear install pecl/intl
- 您可能必须首先将pecl通道添加到pear。/Applications/MAMP/bin/php/php[version]/include/php
(如博客文章中所述)extension=intl.so
添加到php.ini。在MAMP中,您可以通过转到文件&gt;轻松编辑php.ini。编辑模板&gt; PHP。[版]的.ini 命令行:
php
CLI通常使用不同的php.ini
,您也需要在其中添加扩展指令。要查找CLI的php.ini,只需执行$ php -i |grep php\.ini
以发现文件路径,并将extension=intl.so
添加到该php.ini中。$ php -m
检查可用模块。答案 0 :(得分:114)
更新 php-intl 扩展程序,即icu错误的来源!
sudo aptitude install php5-intl // i.e. ubuntu
brew install icu4c // osx
检查扩展是否已启用并在php.ini中正确配置。
(提示:php-cli有时使用不同的php.ini)
<强>的php.ini 强>
extension=intl.so ; *nix
extension=php_intl.dll ; windows
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
如果已成功启用扩展程序,请检查终端中的phpinfo()
和php -m
。
使用以下命令检查您当前的intl版本:
Intl::getIcuVersion();
Intl::getIcuDataVersion();
关注:不再需要( symfony 2.3已经同时发布)
请将最小稳定性标志@dev或@rc添加到您的依赖项中,如下所示:
composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.*@dev
作曲家的默认稳定性是稳定的,symfony 2.3分支当前不是(它的@rc)。阅读更多稳定性标志here。
答案 1 :(得分:21)
许多应用程序只支持“en”语言环境,不需要翻译功能或php-intl。如果是您,或者您无法在服务器上安装php-intl,则可以向composer.json
明确添加symfony/icu ~1.0。 1.0不需要php-intl,而1.1+则不需要。
如果您不需要翻译功能:
$ php bin/composer.phar require symfony/icu ~1.0
没有这个声明并尝试安装symfony / symfony 2.3 Composer可能会尝试安装symfony / icu~1.2,这需要你安装php-intl。
“ICU和部署问题”下的Symfony Intl Component's docs更明确地涵盖了这一点。
答案 2 :(得分:15)
可以在此处找到有关此问题或类似问题的解决方案:ICU and Deployment Problems
作曲家的行为应该是智能选择正确的icu-component:
- symfony / icu 1.0。*:当intl扩展名不可用时
- symfony / icu 1.1。*:使用ICU 4.0或更高版本编译intl时
- symfony / icu 1.2。*:当使用ICU 4.4或更高版本编译intl时
安装symfony 2.3应该(理论上)没有错误。没有国际延伸。
但是当您的开发环境与本文中提到的生产服务器不同时,您可能会陷入困境:
- 开发机器使用ICU 4.4或更高版本编译,但服务器编译为> ICU版本低于4.4
- 可以在开发计算机上使用intl扩展名,但不能在服务器上使用。
如果您对生产服务器没有root访问权限,则可以按照本文中的说明进行修复。 (调整composer.json)
希望这些额外的信息有所帮助,因为它帮助了我处理不同环境的特殊情况。
答案 3 :(得分:9)
Mac OS Mavericks附带PHP 5.4.17而没有intl。要实现这一点,您必须遵循以下步骤:
brew install icu4c
sudo pecl install intl
The path to the ICU libraries and headers is: /usr/local/opt/icu4c/
Edit /etc/php.ini and add extension=intl.so to the end.
答案 4 :(得分:6)
我知道这个答案可能不是这个人问题的正确答案,但这是我的问题的解决方案。通过在php.ini中启用intl扩展并升级composer,我能够自己解决这个问题。
升级作曲家。
php composer.phar self-update
从此行删除评论(在php.ini中):
extension=php_intl.dll
并删除注释(php.ini)中[intl]下面的这两行:
[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
然后重新启动apache2。 :)
其他信息:
如果您使用mac并使用Homebrew安装了php,请按照以下步骤操作:
(PHP 5.4)
$ brew install php54-intl
(PHP 5.5)
$ brew tap josegonzalez/php
$ brew tap homebrew/dupes
$ brew install josegonzalez/php/php55-intl
$ sudo apachectl restart
重启apache。
答案 5 :(得分:5)
更好的解决方案是将composer.json修复为生产服务器所需的版本。首先,确定服务器上的ICU版本: 1 2
$ php -i | grep ICU
ICU version => 4.2.1
然后将composer.json文件中的Icu组件修复为匹配版本:
"require: {
"symfony/icu": "1.1.*"
}
将版本设置为 “1.0。”如果服务器没有安装intl扩展名; “1.1。”如果服务器是使用ICU 4.2或更低版本编译的。
最后,运行
php composer.phar update symfony/icu
在您的开发计算机上,进行广泛测试并再次部署。现在,安装依赖项将会成功。