111 votes

Problèmes avec la dépendance lib-icu lors de l'installation de Symfony 2.3.x via Composer

Je n'ai eu aucun problème pour installer Symfony 2.2.x à l'aide de Composer, j'ai toujours simplement copié la version stable à l'adresse suivante http://symfony.com/download .

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

(J'ai installé Composer de manière globale)
Curieux de connaître la 2.3.0-RC1, j'ai pensé que cela se passerait bien :

composer create-project symfony/framework-standard-edition mynewerproject/ 2.3.0-RC1

Mais j'ai été arrêté par les erreurs suivantes :

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

Dois-je modifier le fichier composer.json ?


Mise à jour de la solution

Il me manquait le extension php intl qui prévoit lib-icu

C'est très simple, installez et configurez l'extension intl. Depuis PHP 5.3, l'extension Intl est distribuée par défaut, mais certaines distributions, comme MAMP, n'ont pas Intl, vous devrez donc l'acquérir. J'ai utilisé PEAR :

Mes pas :

  • Installez l'extension Intl (maintenue par PECL) : $ pear install pecl/intl - vous devrez peut-être ajouter le canal pecl à pear d'abord.
  • Si vous utilisez MAMP et n'ont jamais travaillé avec le contrôle de poire/pecl Lullabot's helpful blog post ; MAMP n'est pas livré avec les sources de php, vous devez donc téléchargez la source de votre version de php et déplacer la source dans /Applications/MAMP/bin/php/php[version]/include/php (comme indiqué dans l'article de blog)
  • PEAR ne pouvait pas trouver mon php.ini, j'ai donc dû ajouter manuellement extension=intl.so dans le php.ini. Dans MAMP, vous pouvez modifier facilement le php.ini en allant dans Fichier > Modifier le modèle > php.[version].ini

Ligne de commande :

  • Si vous utilisez Composer ou la console CLI de Symfony, vous aurez également besoin d'Intl et, puisque l'option php CLI utilise généralement un autre php.ini vous voudrez ajouter la directive d'extension là aussi. Pour trouver le php.ini de votre CLI, faites simplement $ php -i |grep php\.ini pour découvrir le chemin du fichier et ajouter extension=intl.so à ce php.ini également.
  • Pour vérifier si Intl est installé, vous pouvez effectuer les opérations suivantes $ php -m pour vérifier les modules disponibles.

117voto

nifr Points 17866

Actualiser votre php-intl extension, c'est de là que vient l'erreur icu !

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

Vérifiez également que l'extension est activée et correctement configurée dans le php.ini.

( indice : php-cli utilise parfois un php.ini différent )

php.ini

extension=intl.so       ; *nix
extension=php_intl.dll  ; windows

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

vérifiez votre phpinfo() ET php -m à partir de votre terminal si l'extension a été activée avec succès.

Vérifiez vos versions actuelles d'intl à partir de php avec :

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

attention : plus nécessaire ( symfony 2.3 a été publié entre-temps )

ajoutez l'indicateur de stabilité minimale @dev ou @rc à votre dépendance comme ceci s'il vous plaît :

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

La stabilité par défaut dans le compositeur est stable, ce qui n'est pas le cas de la branche symfony 2.3 actuellement (c'est @rc). En savoir plus sur les drapeaux de stabilité aquí .

21voto

John Kary Points 2020

De nombreuses applications ne supporteront que la locale "en" et n'auront pas besoin de capacités de traduction ou de php-intl. Si c'est votre cas, ou si vous ne pouvez pas installer php-intl sur votre serveur, vous pouvez explicitement ajouter symfony/icu ~1.0 à votre composer.json . 1.0 ne nécessite pas php-intl, alors que la version 1.1+ le fait.

Si vous n'avez pas besoin de fonctions de traduction :

$ php bin/composer.phar require symfony/icu ~1.0

Sans cette déclaration et en essayant d'installer symfony/symfony 2.3, Composer pourrait essayer d'installer symfony/icu ~1.2, ce qui nécessiterait d'installer php-intl.

Ce point est explicitement abordé de manière plus approfondie dans le document Documentation du composant Symfony Intl sous la rubrique "ICU et problèmes de déploiement".

15voto

tweini Points 195

Une solution à ce problème ou à des problèmes similaires peut être trouvée ici : ICU et problèmes de déploiement

Le comportement du compositeur devrait être intelligent en sélectionnant le bon composant d'icu :

  • symfony/icu 1.0.* : lorsque l'extension intl n'est pas disponible
  • symfony/icu 1.1.* : lorsque intl est compilé avec ICU 4.0 ou supérieur
  • symfony/icu 1.2.* : lorsque intl est compilé avec ICU 4.4 ou supérieur

Il ne devrait pas y avoir (théoriquement) d'erreur lors de l'installation de symfony 2.3. sans intl-extension.

Mais vous pouvez être piégé lorsque votre environnement de développement diffère de votre serveur de production, comme indiqué dans cet article :

  • les machines de développement sont compilées avec ICU 4.4 ou plus, mais le serveur est compilé >avec une version d'ICU inférieure à 4.4
  • l'extension intl est disponible sur les machines de développement mais pas sur le serveur.

Si vous n'avez pas d'accès racine à votre serveur de production, vous pouvez résoudre le problème comme indiqué dans cet article. (modification du fichier composer.json)

J'espère que ces informations supplémentaires vous ont aidé comme elles m'ont aidé pour ce cas particulier avec des environnements différents.

9voto

lenybernard Points 709

Mac OS Mavericks est livré avec PHP 5.4.17 sans intl. Pour l'obtenir, vous devez suivre les étapes suivantes :

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.

6voto

Layton Everson Points 597

Je sais que cette réponse n'est peut-être pas la bonne réponse au problème de cette personne, mais elle a été la solution à mon problème portant le même titre. J'ai pu résoudre ce problème pour moi-même en activant l'extension intl dans le php.ini et en mettant à jour le compositeur.

Mise à jour du compositeur.

php composer.phar self-update

Supprimez le commentaire de cette ligne (dans le php.ini) :

extension=php_intl.dll

Et aussi supprimer le commentaire de ces deux lignes en dessous de [intl] dans (php.ini) :

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

Et redémarrez apache2 bien sûr :)

Informations supplémentaires :

Si vous utilisez un Mac et avez installé php avec Homebrew, suivez ces étapes :

(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

Redémarrer apache.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X