Проблеми із залежністю lib-icu під час встановлення Symfony 2.3.x через Composer


112

У мене не було проблем із встановленням 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 і ніколи не працювали з грушею / пеклами, перевірте корисну публікацію в блозі lullabot ; MAMP не постачається з PHP-джерелом, тому вам доведеться завантажити джерело для вашої версії php та перемістити джерело /Applications/MAMP/bin/php/php[version]/include/php(як описано в публікації блогу)
  • PEAR не зміг знайти свій php.ini, тому мені довелося вручну додати extension=intl.soдо php.ini. У програмі MAMP ви можете легко редагувати php.ini, перейшовши у меню Файл> Редагувати шаблон> php. [Версія] .ini

Командний рядок:

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

який ОС ви використовуєте? то я можу надати інформацію про те, як оновити розширення intl.
Микола Фрехліч

Не використовуйте pecl / intl, оскільки це сумісність із PHP 5.2.x. Станом на PHP 5.3, Intl є основним розширенням.
Jérôme Vieilledent

2
@ JérômeVieilledent, здається, поточний дистрибутив MAMP не в'яже Intl, що лише залишає вам можливість використовувати PECL для його побудови php.net/manual/en/intl.installation.php
Марк Фокс

Відповіді:


118

оновіть розширення php-intl , ось звідки походить помилка icu!

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

перевірте, чи розширення увімкнено та налаштовано належним чином у php.ini aswell.

(підказка: інколи 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 

Стабільність стабільності за замовчуванням у композитора є стабільною, в даний час гілка symfony 2.3 не є (це @rc). Детальніше про прапори стабільності читайте тут .


Чудова стаття. Документація композитора залишила мені менше, ніж певне, що, якщо що-небудь з'явиться прапор стабільності.
Марк Фокс

Я встановив php-intl через PEAR / PECL. Чомусь INTL::…не вдається. Але через phpinfo () у браузері я бачу, що встановлено Intl та версія ICU - 49.x. Однак композитор все-таки не працює з тим же повідомленням про помилку.
Марк Фокс

яка операційна система? Наприклад, "sudo здатність встановити php5-intl" на ubuntu. розширення, включене в php.ini, видиме з php -m з командного рядка?
Микола Фрехліч

1
Mac OSX 10.7.5 - коли я запускаю, php -mя не бачу intl. Я знаю, що він працює на веб-сервері, але він не розпізнається в командному рядку. Отже ... я повинен додати його до командного рядка?
Марк Фокс

Я встановив через Homebrew, але php -mвсе ще не розпізнає від CLI?
Марк Фокс

21

Багато додатків підтримуватимуть лише локальну мову "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 Композитор може спробувати встановити symfony / icu ~ 1.2, що вимагатиме встановлення php-intl.

Це чітко висвітлюється в документах Symfony Intl Component в розділі "Проблеми ICU та розгортання".


1
Дякую за це Абсурдно, що Symfony2 вимикає інсталяцію над функцією, яка повинна бути необов’язковою і не встановлена ​​у багатьох середовищах.
Acyra

Вибачте, але це неправда. Встановлення symfony 2.3 призведе до перегляду конфігурації та визначить правильний icu-компонент. Він НЕ закриється.
tweini

POC composer.json: "require":{"symfony/symfony": "v2.3.3"}}результат: «Завантаження композиторських сховищ із інформацією про пакет Встановлення залежностей (включаючи Require-Dev) - Встановлення psr / log (1.0.0) Завантаження: 100% - Встановлення гілочки / гілочки (v1.13.2) Завантаження: 100% - Встановлення доктрини / загального (2.3.0) Завантаження: 100% - Встановлення symfony / symfony (v2.3.3) Завантаження: 100% - Встановлення symfony / icu (v1.0.0) Завантаження: 100% Запис файлу блокування Генерування файлів автозавантаження
tweini

1
Як пояснено в документах, проблема виникає при composer.lockспільному використанні між середовищами з різними версіями (або відсутністю) Intl.
Тамлін

Дякую за це! Перехрестивши пальці, я можу змусити проект Symfony2 працювати на клієнта, який досі працює на GoDaddy
Метт

15

Вирішення цієї чи подібних проблем можна знайти тут: ICU та Deployment Problems

Поведінка композитора повинна бути розумним підбором правильної icu-складової:

  • symfony / icu 1.0. *: коли розширення intl недоступне
  • symfony / icu 1.1. *: коли intl компілюється з ICU 4.0 або вище
  • symfony / icu 1.2. *: коли intl компілюється з ICU 4.4 або вище

Теоретично не повинно бути помилок при встановленні символу 2.3. без внутрішнього розширення.

Але ви можете потрапити в пастку, коли ваше середовище розробки відрізняється від вашого виробничого сервера, як зазначено в цій статті:

  • Машини розробки компілюються з ICU 4.4 або вище, але сервер компілюється> з меншою версією ICU, ніж 4.4
  • розширення intl доступне на розроблювальних машинах, але не на сервері.

Якщо у вас немає кореневого доступу до виробничого сервера, ви можете виправити його, як зазначено в цій статті. (налаштування composer.json)

Сподіваюсь, ця додаткова інформація допомогла, оскільки допомогла мені у цій особливій справі з різними середовищами.


9

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.

6

Я знаю, що ця відповідь може не бути правильною відповіддю на проблему цієї людини, але це було вирішенням моєї проблеми з тим же заголовком. Мені вдалося вирішити цю проблему для себе, включивши розширення 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

Перезапустіть апаш.


1
Схоже, це виправлення Windows ;-)
Марк Фокс

1
Так, я використовую Windows, однак, його не "windows fix" його php-конфігурація та виправлення оновлення композитора. Такі ж кроки можуть знадобитися зробити на linux або mac box.
Лейтон Еверсон

Правильно. Можливо, ви повинні згадати, який дистрибутив php / apache ви використовуєте тоді. У вашому випадку розширення intl в комплекті, і його просто потрібно ввімкнути, це чудова новина для тих, хто використовує той самий пакет distro.
Марк Фокс

1
Добрий момент Марк Фокс. Ось ми для тих, хто цього потребує. Я використовую стек XAMPP від ​​apachefriends на вікні Windows 8. (версія 1.8)
Лейтон Еверсон

1
Для мене це виправлено за допомогою XAMPP. Розширення вже було включено, але воно працювало лише після додавання [intl] intl.default_locale = en_utf8 intl.error_level = E_WARNING
d0001

5

Краще рішення - виправити ваш 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. ", Якщо сервер компільований з ІКУ 4.2 або вище.

Нарешті, біжи

php composer.phar update symfony/icu

на вашій розроблювальній машині велико тестуйте і знову розгортайте. Встановлення залежностей тепер вдасться.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.