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

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

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

  • При использовании Composer или консоли CLI Symfony вам также понадобится Intl, и поскольку php CLI обычно использует другой php.ini вы также захотите добавить туда директиву расширения. Чтобы найти php.ini вашего CLI, просто сделайте $ php -i |grep php\.ini найти путь к файлу и добавить extension=intl.so к тому же php.ini.
  • Чтобы проверить, установлен ли Intl, вы можете сделать $ php -m проверить доступные модули.

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

Проверьте ваши текущие версии intl из php:

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

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

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

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

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

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

Решение относительно этой или подобных проблем может быть найдено здесь: 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 или выше, но сервер скомпилирован> с более низкой версией ICU, чем 4.4
  • Расширение intl доступно на компьютерах разработчиков, но не на сервере.

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

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

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.

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

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

php composer.phar self-update

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

extension=php_intl.dll

А также удалите комментарий этих двух строк ниже [intl] в (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.

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

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

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

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

Установите версию на "1.0. ", Если на сервере не установлено расширение intl; "1.1. ", Если сервер скомпилирован с ICU 4.2 или ниже.

Наконец, беги

php composer.phar update symfony/icu

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

Другие вопросы по тегам