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

我在使用 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].

我是否需要调整 poser.json 文件?


解决方案更新

我错过了提供 Lib-ICUPhp intl 扩展程序

因此,很容易安装和配置 intl 扩展。在 PHP 5.3中,默认情况下发布了 Intl 扩展,但是有些发行版(如 MAMP)没有 Intl,因此需要获取它。我用的是 :

My steps:

  • Install the Intl extension (maintained by PECL): $ pear install pecl/intl — you may have to add the pecl channel to pear first.
  • 如果您使用 MAMP 并且从未使用过 pear/pecl,请检查 摇篮曲的有用的博客文章; MAMP 不与 php 源代码一起发布,因此您必须将源代码转移到 /Applications/MAMP/bin/php/php[version]/include/php(如博客文章所述)
  • PEAR 找不到我的 php.ini,所以我不得不手动将 extension=intl.so添加到 php.ini。在 MAMP 中,可以通过文件 > 编辑模板 > php 轻松地编辑 php.ini。[版本]。(意大利语)

命令行:

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

更新您的 Php-intl扩展,这就是重症监护室错误的来源!

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从您的终端,如果扩展已成功启用。

使用以下命令检查 php 当前的 intl 版本:

Intl::getIcuVersion();
Intl::getIcuDataVersion();

注意: 不再需要了

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

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.*@dev

作曲家的默认稳定性是稳定的,而 symfony 2.3分支目前还不稳定(它是@rc)。阅读更多稳定性标志 给你

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

正在升级的作曲家。

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,并且已经安装了 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

重启阿帕奇。

关于这个或类似问题的解决方案可以在这里找到: ICU 和部署问题

作曲家的行为应该是明智的选择正确的重症监护室组件:

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

(理论上)在没有 intl 扩展的情况下安装 symfony 2.3应该没有错误。

But you can be trapped when your development-environment differs from your production-server like mentioned in this article:

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

当您没有对生产服务器的 root 访问权限时,您可以像本文中提到的那样修复它

希望这些额外的信息能够帮助我在不同的环境下处理这个特殊的案例。

许多应用程序将只支持“ en”locale,并且不需要翻译功能或 php-intl。如果是您,或者您无法在服务器上安装 php-intl,那么可以显式地将 symfony/icu ~ 1.0添加到 composer.json中。1.0不需要 php-intl,而1.1 + 需要。

If you don't need translation features:

$ php bin/composer.phar require symfony/icu ~1.0

如果没有这个声明并且尝试安装 symfony/symfony 2.3 Composer 可能会尝试安装 symfony/icu ~ 1.2,这将需要您安装 php-intl。

这在 Symfony Intl Component's docs的“ ICU 和部署问题”中有更广泛的阐述。

Mac OS Mavericks 带有 PHP5.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.

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

$ php -i | grep ICU
ICU version => 4.2.1

然后,将 comper.json 文件中的 Icu 组件修复为一个匹配的版本:

"require: {
"symfony/icu": "1.1.*"
}

将版本设置为 如果服务器没有安装 intl 扩展,则为“1.0. < em >”; 如果服务器使用 ICU 4.2或更低版本编译,则为“1.1. ”

Finally, run

php composer.phar update symfony/icu

在您的开发计算机上,广泛地测试并再次部署。现在将成功安装依赖项。