首页 文章

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

提问于
浏览
107

我'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 回答

  • 6

    更新你的 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 .

    从php检查当前的intl版本:

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

    attention: not needed anymore (symfony 2.3同时发布)

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

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

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

  • 15

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

    如果您不需要翻译功能:

    $ 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下的Symfony Intl Component's docs更明确地涵盖了这一点 .

  • 9

    有关此问题或类似问题的解决方案可在此处找到:ICU and Deployment Problems

    作曲家的行为应该是智能选择正确的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)

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

  • 114

    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.
    
  • 5

    我知道这个答案可能不是这个人问题的正确答案,但它是我的问题的解决方案 . 通过在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 . :)

    Additional Information:

    如果你的使用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 .

  • 21

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

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

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

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

    将版本设置为“1.0." if the server does not have the intl extension installed; " 1.1” . 如果服务器是使用ICU 4.2或更低版本编译的 .

    最后,跑

    php composer.phar update symfony/icu
    

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

相关问题