ChatGPT解决这个技术问题 Extra ChatGPT

通过 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].

我需要调整 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,并且由于 php CLI 通常使用不同的 php.ini,您也需要在其中添加扩展指令。要查找 CLI 的 php.ini,只需执行 $ php -i |grep php\.ini 以发现文件路径并将 extension=intl.so 也添加到该 php.ini 中。

要检查是否安装了 Intl,您可以执行 $ php -m 来检查可用模块。

你用的是哪个操作系统?然后我可以提供有关如何更新您的国际扩展名的信息。
不要使用 pecl/intl,因为它是为了与 PHP 5.2.x 兼容。从 PHP 5.3 开始,Intl 是一个核心扩展。
@JérômeVieilledent 似乎当前的 MAMP 发行版没有捆绑 Intl,这只让您可以选择使用 PECL 来构建它php.net/manual/en/intl.installation.php

N
Nicolai Fröhlich

更新您的 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 )。阅读更多稳定性标志 here


很棒的文章。 Composer 文档让我不确定稳定性标志是否正在发挥作用。
我通过 PEAR/PECL 安装了 php-intl。由于某种原因 INTL::… 失败。但是,我可以通过浏览器中的 phpinfo() 看到安装了 Intl 并且 ICU 版本是 49.x。但是,Composer 仍然失败并显示相同的错误消息。
哪个操作系统?例如,在 ubuntu 上的“sudo aptitude install php5-intl”。在 php.ini 中启用扩展,在命令行中使用 php -m 可见?
Mac OSX 10.7.5 — 当我运行 php -m 时,我看不到 intl。我知道它可以在网络服务器上运行,但在命令行上无法识别。所以……我必须将它添加到命令行?
我通过 Homebrew 安装,但 php -m 仍然无法从 CLI 中识别?
J
John Kary

许多应用程序只支持“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。

这在“ICU 和部署问题”下的 Symfony Intl Component's docs 中有更广泛的明确介绍。


谢谢你。 Symfony2 通过一个应该是可选的并且在许多环境中没有安装的功能而关闭安装是荒谬的。
对不起,但这不是真的。安装 symfony 2.3 将自省配置并确定正确的 icu 组件。它不会关闭。
POC composer.json :"require":{"symfony/symfony": "v2.3.3"}} 结果:'使用包信息加载 composer 存储库安装依赖项(包括 require-dev) - 安装 psr/log (1.0.0) 下载:100% - 安装 twig/ twig (v1.13.2) 下载:100% - 安装教义/common (2.3.0) 下载:100% - 安装 symfony/symfony (v2.3.3) 下载:100% - 安装 symfony/icu (v1.0.0) 下载: 100% 写入锁定文件 生成自动加载文件
如文档中所述,当 composer.lock 在具有不同 Intl 版本(或不存在)的环境之间共享时,就会出现问题。
谢谢你!交叉手指我可以让我的 Symfony2 项目为仍在 GoDaddy 上的客户运行
t
tweini

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

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

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


l
lenybernard

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.

L
Layton Everson

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

重启阿帕奇。


看起来这是 Windows 修复 ;-)
是的,我使用的是 Windows,但是,它不是“Windows 修复”,它是 php 配置和作曲家更新修复。可能需要在 linux 或 mac 机器上执行相同的步骤。
正确的。也许您应该提及您正在使用的 php/apache 发行版。在您的情况下,intl 扩展是捆绑的,只需要启用,这对于使用相同发行包的任何人来说都是个好消息。
好点马克福克斯。我们在这里为任何需要它的人服务。我在 Windows 8 机器上使用来自 apachefriends 的 XAMPP 堆栈。 (1.8版)
对我来说,这使用 XAMPP 修复了它。该扩展已启用,但仅在添加 [intl] intl.default_locale = en_utf8 intl.error_level = E_WARNING 后才有效
t
thewbb

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

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

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

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

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

最后,运行

php composer.phar update symfony/icu

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


关注公众号,不定期副业成功案例分享
关注公众号

不定期副业成功案例分享

领先一步获取最新的外包任务吗?

立即订阅