通过Composer安装Symfony 2.3.x时出现lib-icu依赖性问题

Mar*_*Fox 110 php symfony composer-php

我使用Composer安装Symfony 2.2.x没有问题,我总是在http://symfony.com/download上复制稳定版本.

composer create-project symfony/framework-standard-edition myproject/ 2.2.1
Run Code Online (Sandbox Code Playgroud)

(我在全球安装了Composer)
好奇的2.3.0-RC1我觉得这会很顺利:

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1
Run Code Online (Sandbox Code Playgroud)

但是由于以下错误而关闭:

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].
Run Code Online (Sandbox Code Playgroud)

我需要调整composer.json文件吗?


解决方案更新

我错过了提供lib-icuphp intl扩展

如此简单,安装和配置intl扩展.从PHP 5.3开始,Intl扩展默认是分发的,但是某些发行版(如MAMP)没有Intl,所以你需要获取它.我用PEAR:

我的步骤:

  • 安装Intl扩展(由PECL维护):$ pear install pecl/intl- 您可能必须首先将pecl通道添加到pear.
  • 如果您使用MAMP并且从未使用过pear/pecl,请查看lullabot的有用博客文章 ; MAMP不附带php源代码,因此您必须下载php版本的源代码并将源代码移入/Applications/MAMP/bin/php/php[version]/include/php(如博客文章中所述)
  • PEAR找不到我的php.ini,所以我不得不手动添加extension=intl.so到php.ini.在MAMP中,您可以通过转到文件>编辑模板> php.[版本] .ini轻松编辑php.ini

命令行:

  • 使用Composer或Symfony的Console CLI时,您还需要使用Intl,并且由于phpCLI通常使用不同的,因此php.ini您也需要在其中添加扩展指令.要找到你的CLI的php.ini,只$ php -i |grep php\.ini需要发现文件路径并添加extension=intl.so到php.ini.
  • 要检查是否已安装Intl,您可以$ php -m检查可用模块.

Nic*_*ich 116

更新你的php-intl扩展,这就是icu错误的来源!

sudo aptitude install php5-intl                 // i.e. ubuntu
brew install icu4c                              // osx
Run Code Online (Sandbox Code Playgroud)

检查扩展是否已启用并在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
Run Code Online (Sandbox Code Playgroud)

如果已成功启用扩展phpinfo(),请php -m从终端检查您的AND .

从php检查当前的intl版本:

Intl::getIcuVersion();
Intl::getIcuDataVersion();
Run Code Online (Sandbox Code Playgroud)

注意:不再需要了(symfony 2.3同时发布)

请将最小稳定性标志@dev或@rc添加到您的依赖项中,如下所示:

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.*@dev 
Run Code Online (Sandbox Code Playgroud)

作曲家的默认稳定性是稳定的,symfony 2.3分支当前不是(它是@rc).在这里阅读更多稳定性标志.


Joh*_*ary 21

许多应用程序只支持"en"语言环境,不需要翻译功能或php-intl.如果是你,或者你不能在你的服务器上安装php-intl,你可以明确地将symfony/icu ~1.0 添加到你的服务器上composer.json.1.0不需要php-intl,而1.1+则需要.

如果您不需要翻译功能:

$ php bin/composer.phar require symfony/icu ~1.0
Run Code Online (Sandbox Code Playgroud)

没有这个声明并尝试安装symfony/symfony 2.3 Composer可能会尝试安装symfony/icu~1.2,这需要你安装php-intl.

在"ICU和部署问题"下的Symfony Intl组件的文档中更明确地涵盖了这一点.


twe*_*ini 15

可以在此处找到有关此类问题或类似问题的解决方案:ICU和部署问题

作曲家的行为应该是智能选择正确的icu组件:

  • symfony/icu 1.0.*:当intl扩展名不可用时
  • symfony/icu 1.1.*:当使用ICU 4.0或更高版本编译intl时
  • symfony/icu 1.2.*:当使用ICU 4.4或更高版本编译intl时

安装symfony 2.3应该(理论上)没有错误.没有intl-extension.

但是,当您的开发环境与本文中提到的生产服务器不同时,您可能会陷入困境:

  • 开发机器使用ICU 4.4或更高版本编译,但服务器编译> ICU版本低于4.4
  • intl扩展在开发机器上可用,但在服务器上不可用.

如果您没有对生产服务器的root访问权限,则可以按照本文中的说明进行修复.(调整composer.json)

希望这些额外的信息有所帮助,因为它帮助了我在不同环境下的特殊情况.


len*_*ard 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.
Run Code Online (Sandbox Code Playgroud)


Lay*_*son 6

我知道这个答案可能不是这个人问题的正确答案,但它是我的问题的解决方案.通过在php.ini中启用intl扩展并升级composer,我能够自己解决这个问题.

升级作曲家.

php composer.phar self-update
Run Code Online (Sandbox Code Playgroud)

从这一行删除评论(在php.ini中):

extension=php_intl.dll
Run Code Online (Sandbox Code Playgroud)

并删除注释(php.ini)中[intl]下面的这两行:

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING
Run Code Online (Sandbox Code Playgroud)

然后重新启动apache2.:)

附加信息:

如果您使用mac并使用Homebrew安装php,请按照以下步骤操作:

(PHP 5.4)

$ brew install php54-intl
Run Code Online (Sandbox Code Playgroud)

(PHP 5.5)

$ brew tap josegonzalez/php
$ brew tap homebrew/dupes
$ brew install josegonzalez/php/php55-intl
$ sudo apachectl restart
Run Code Online (Sandbox Code Playgroud)

重启apache.


the*_*wbb 5

更好的解决方案是将composer.json修复为生产服务器所需的版本.首先,确定服务器上的ICU版本:1 2

$ php -i | grep ICU
ICU version => 4.2.1
Run Code Online (Sandbox Code Playgroud)

然后将composer.json文件中的Icu组件修复为匹配的版本:

"require: {
    "symfony/icu": "1.1.*"
}
Run Code Online (Sandbox Code Playgroud)

如果服务器没有安装intl扩展,请将版本设置为"1.0."."1.1. "如果服务器是使用ICU 4.2或更低版本编译的.

最后,跑

php composer.phar update symfony/icu
Run Code Online (Sandbox Code Playgroud)

在您的开发机器上,进行广泛测试并再次部署.现在,依赖项的安装将成功.