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


у меня не было проблем с установкой Symfony 2.2.x используя Composer, я всегда просто копировал стабильную версию в http://symfony.com/download.

composer create-project symfony/framework-standard-edition myproject/ 2.2.1

(у меня композитор установлен глобально)
Любопытно о 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].

мне нужно настроить композитора.формат JSON файл?


Обновление Решений

я пропустил PHP intl extension, которая содержит lib-icu

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

мои действия:

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

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

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

6 ответов:

обновить php-intl расширение, вот откуда приходит ошибка icu!

sudo aptitude install php5-intl                 // i.e. ubuntu
brew install icu4c                              // osx

проверьте, что расширение включено и правильно настроено в php.а также Ини.

(подсказка: 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.*: при продлении пребывания не имеется
  • 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 и обновление композитора.

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

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.

лучшее решение-исправить вашего композитора.json до версии, требуемой рабочим сервером. Во-первых, определите версию ICU на сервере: Один 2

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

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

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

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

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

php composer.phar update symfony/icu

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