114

我使用 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 文件吗?


解决方案更新

我错过了提供lib-icu的php intl 扩展

如此简单,安装和配置 intl 扩展。自 PHP 5.3 起,默认分发 Intl 扩展,但某些分发,如 MAMP,没有 Intl,因此您需要获取它。我用

我的步骤:

  • 安装 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.[version].ini 轻松编辑 php.ini

命令行:

  • 当使用 Composer 或 Symfony 的控制台 CLI 时,您还需要 Intl,因为phpCLI 通常使用不同的 CLI,您也需要php.ini在其中添加扩展指令。要找到 CLI 的 php.ini,只需$ php -i |grep php\.ini找到文件路径并将其添加extension=intl.so到该 php.ini 即可。
  • 要检查是否安装了 Intl,您可以$ php -m检查可用模块。
4

6 回答 6

119

更新您的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()AND 。php -m

从 php 检查您当前的 intl 版本:

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

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

请像这样将最低稳定性标志 @dev 或 @rc 添加到您的依赖项中:

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

composer 中的默认稳定性是 stable 哪个 symfony 2.3 分支当前不是稳定的(它是 @rc )。在此处阅读更多稳定性标志。

于 2013-05-25T19:26:00.837 回答
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

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

这在Symfony Intl 组件的“ICU 和部署问题”下的文档中有更广泛的明确介绍。

于 2013-07-17T14:08:38.667 回答
15

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

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

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

安装 symfony 2.3 应该(理论上)没有错误。没有国际扩展名。

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

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

当您没有对生产服务器的 root 访问权限时,您可以按照本文所述进行修复。(调整 composer.json)

希望这些附加信息对我有所帮助,因为它对我在不同环境下的这种特殊情况有所帮助。

于 2013-07-03T07:13:10.860 回答
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.
于 2013-11-12T22:30:41.090 回答
6

我知道这个答案可能不是这个人问题的正确答案,但它是我同名问题的解决方案。通过在 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 并使用 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

重启阿帕奇。

于 2013-05-26T23:24:16.443 回答
5

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

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

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

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

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

最后,运行

php composer.phar update symfony/icu

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

于 2014-01-10T13:01:28.893 回答