在通过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 

但由于以下错误已closures:

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


解决scheme更新

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

这么简单,安装和configurationintl扩展。 从PHP 5.3开始,Intl扩展默认是分布式的,但是像MAMP这样的一些发布版本没有Intl,所以你需要获取它。 我用

我的步骤:

  • 安装Intl扩展(由PECL维护): $ pear install pecl/intl – 您可能必须先将pecl通道添加到pear。
  • 如果你使用MAMP ,并从来没有与梨/ 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,而且由于php CLI通常使用不同的php.ini ,所以你也需要在那里添加扩展指令。 要find你的CLI的php.ini,只需要$ php -i |grep php\.ini来发现文件path,并将extension=intl.so添加到该php.ini文件中。
  • 要检查是否安装了Intl,可以使用$ php -m来检查可用的模块。

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

 sudo aptitude install php5-intl // ie ubuntu brew install icu4c // osx 

检查扩展是否启用,并在php.ini中正确configuration。

(提示: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从您的terminal,如果扩展已成功启用。

检查您的PHP目前国际版本与:

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

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

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

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

composer php的默认稳定性是稳定的,其中symfony 2.3分支目前不是(它是@rc)。 阅读更多的稳定标志在这里 。

许多应用程序只支持“en”语言环境,不需要翻译function或php-intl。 如果这是你,或者你不能在你的服务器上安装php-intl,你可以直接在你的composer.json添加symfony / icu〜1.0 。 1.0不需要php-intl,而1.1+可以。

如果你不需要翻译function:

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

没有这个声明,并试图安装symfony / symfony 2.3composer php可能会尝试安装symfony / icu〜1.2,这将需要您安装php-intl。

这在Symfony Intl组件的文档 “ICU和部署问题”下得到了更广泛的涵盖。

关于这个或类似问题的解决scheme可以在这里find: ICU和部署问题

composer php的行为应该是聪明的select正确的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
  • intl扩展在开发机器上可用,但不在服务器上。

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

希望这些额外的信息能够帮助我解决这个特殊情况下的不同环境。

Mac OS Mavericks不带intl的PHP 5.4.17。 要得到这个,你必须遵循以下步骤:

 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. 

我知道这个答案可能不是这个人问题的正确答案,但这是解决我同样题目的问题的方法。 我可以通过在php.ini中启用intl扩展并升级composer来解决这个问题。

升级composer php。

 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 

重新启动Apache。

更好的解决scheme是将您的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 

在你的开发机器上,广泛的testing和部署。 依赖关系的安装现在将成功。