Проблемы с зависимостью lib-icu при установке Symfony 2.3.x через Composer

108

У меня не было проблем с установкой Symfony 2.2.x с использованием Composer, я всегда просто скопировал стабильную версию на 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?


Обновление решения

Мне не хватает расширения php intl, которое предоставляет lib-icu

Так просто, установите и настройте расширение intl. Начиная с PHP 5.3 расширение Intl распространяется по умолчанию, но в некоторых дистрибутивах, таких как MAMP, нет Intl, поэтому вам нужно его приобрести. Я использовал PEAR:

Мои шаги:

  • Установите расширение Intl (поддерживается PECL): $ pear install pecl/intl - вам может потребоваться добавить канал pecl для груши в первую очередь.
  • Если вы используете MAMP и никогда не работали с pear/pecl check lullabot полезным сообщением в блоге; MAMP не поставляется с источником php, поэтому вы должны загрузить исходный код для вашей версии php и переместить источник в /Applications/MAMP/bin/php/php[version]/include/php (как описано в сообщении блога )
  • PEAR не смог найти мой php.ini, поэтому мне пришлось вручную добавить extension=intl.so в php.ini. В MAMP вы можете легко редактировать php.ini, перейдя в File > Edit Template > php. [Version].ini

Командная строка:

  • При использовании CLI Composer или Symfony Console вам также понадобится Intl, и поскольку CLI php обычно использует другой php.ini, вы также захотите добавить директиву расширения. Чтобы найти ваш CLI php.ini, просто $ php -i |grep php\.ini, чтобы открыть путь к файлу и добавить extension=intl.so в этот php.ini.
  • Чтобы проверить, установлен ли Intl, вы можете сделать $ php -m для проверки доступных модулей.
  • 0
    какую операционную систему вы используете? тогда я могу предоставить информацию о том, как обновить ваше расширение intl.
  • 0
    Не используйте pecl / intl, так как он для совместимости с PHP 5.2.x. Начиная с PHP 5.3, Intl является основным расширением.
Показать ещё 1 комментарий
Теги:
composer-php

6 ответов

112
Лучший ответ

обновите расширение 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 с вашего терминала, если расширение было успешно включено.

Проверьте текущие версии intp с php с помощью:

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

внимание: больше не требуется (Symfony 2.3 тем временем был выпущен)

добавьте минимальный флаг устойчивости @dev или @rc к вашей зависимости, например:

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

Стабильность по умолчанию в компоновщике стабильна, и в настоящее время она не является ветвью symfony 2.3 (это @rc). Подробнее о флагах стабильности здесь.

  • 0
    Отличная статья. Документация Composer оставляла меня менее чем уверенным в том, что, если что-нибудь, в игру вступает флаг стабильности.
  • 0
    Я установил php-intl через PEAR / PECL. По некоторым причинам INTL::… не удается. Но я могу видеть через phpinfo () в браузере, что Intl установлен, а версия ICU - 49.x. Тем не менее, Composer по-прежнему не удается с тем же сообщением об ошибке.
Показать ещё 13 комментариев
20

Многие приложения будут поддерживать только "en" locale и не будут нуждаться в возможностях перевода или 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 Component в разделе "Проблемы ICU и проблемы развертывания".

  • 1
    Спасибо за это. Абсурдно, что Symfony2 закрывает установку над функцией, которая должна быть необязательной и не устанавливается во многих средах.
  • 0
    Извините, но это не так. Установка Symfony 2.3 проанализирует конфигурацию и определит правильный icu-компонент. Он НЕ выключится.
Показать ещё 3 комментария
14

Решение по этой или аналогичной проблеме можно найти здесь: 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. без расширения intl.

Но вы можете оказаться в ловушке, когда ваша среда разработки отличается от вашего производственного сервера, как указано в этой статье:

  • машины разработки скомпилированы с ICU 4.4 или выше, но сервер скомпилирован > с более низкой версией ICU, чем 4.4
  • внутреннее расширение доступно на машинах разработки, но не на сервере.

Если у вас нет корневого доступа к вашему серверу production, вы можете исправить его, как указано в этой статье. (настройка композитора .json)

Надеемся, что эта дополнительная информация помогла мне в этом специальном случае с разными средами.

8

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

Я знаю, что этот ответ может быть неправильным ответом на эту проблему, но это было решение моей проблемы с тем же названием. Я смог решить эту проблему самостоятельно, включив расширение intl в php.ini и обновив композитор.

Обновление композитора.

php composer.phar self-update

Удалить комментарий из этой строки (в php.ini):

extension=php_intl.dll

И также удалите комментарий этих двух строк ниже [intl] in (php.ini):

[intl]
intl.default_locale = en_utf8
intl.error_level = E_WARNING

И перезапустите apache2, конечно.:)

Дополнительная информация:

Если вы используете mac и установленный php с Homebrew, выполните следующие действия:

(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.

  • 1
    Похоже, это исправление Windows ;-)
  • 1
    Да, я использую Windows, однако, это не "исправление Windows", а исправление php config и composer update. Те же самые шаги могут потребоваться для Linux или Mac Box.
Показать ещё 3 комментария
4

Лучшее решение - исправить ваш composer.json до версии, требуемой производственным сервером. Сначала определите версию ICU на сервере: 1 2

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

Затем исправьте компонент Icu в файле composer.json в соответствующей версии:

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

Установите версию для "1,0". если на сервере нет встроенного расширения; "1.1". если сервер скомпилирован с ICU 4.2 или ниже.

Наконец, запустите

php composer.phar update symfony/icu

на вашей машине разработки, тщательно протестируйте и разверните ее снова. Теперь установка зависимостей будет успешной.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню