web-dev-qa-db-fra.com

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 à installer Symfony 2.2.x à l'aide de Composer, j'ai toujours simplement copié la version stable à l'adresse http://symfony.com/download .

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

(Composer est installé globalement)
Curieux à propos de 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 s'est 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 fournit lib-icu

Si facile, installez et configurez l'extension intl. À partir de 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 en premier.
  • Si vous utilisez MAMP et que vous n'avez jamais travaillé avec pear/pecl check le blog utile de lullabot ; MAMP n'est pas livré avec la source php, vous devez donc télécharger la source pour votre version php et déplacer la source dans /Applications/MAMP/bin/php/php[version]/include/php (comme indiqué dans l'article du blog)
  • PEAR ne pouvait pas trouver mon php.ini, je devais donc ajouter manuellement extension=intl.so vers php.ini. Dans MAMP, vous pouvez facilement modifier php.ini en allant dans Fichier> Modifier un modèle> php. [Version] .ini

Ligne de commande:

  • Lorsque vous utilisez Composer ou la CLI de la console de Symfony, vous aurez également besoin d’Intl. Etant donné que la phpCLI utilise généralement un php.ini vous voudrez aussi y ajouter la directive d’extension. 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 aussi.
  • Pour vérifier si Intl est installé, vous pouvez faire $ php -m pour vérifier les modules disponibles.
108
Mark Fox

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

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

vérifiez que l'extension est activée et correctement configurée dans php.ini aswell.

(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() AND php -m à partir de votre terminal si l'extension a été activée avec succès.

Vérifiez vos versions intl actuelles de php avec:

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

attention: plus besoin maintenant ( symfony 2.3 est entre-temps sorti)

ajoutez le drapeau de stabilité minimum @dev ou @rc à votre dépendance de la manière suivante:

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

La stabilité par défaut de composer est stable, mais la branche de symfony 2.3 n'est pas actuellement (c'est @rc). Lisez plus d'un indicateur de stabilité ici .

114

De nombreuses applications ne prendront en charge que les paramètres régionaux "en" et n'auront pas besoin de capacités de traduction ni de php-intl. Si tel est votre profil ou que vous ne pouvez pas installer php-intl sur votre serveur, vous pouvez explicitement ajouter symfony/ic ~ 1.0 à votre composer.json. 1.0 ne nécessite pas php-intl, alors que 1.1+ en a besoin.

Si vous n'avez pas besoin de fonctionnalités de traduction:

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

Sans cette déclaration et d'essayer d'installer symfony/symfony 2.3 Composer peut essayer d'installer symfony/icu ~ 1.2, ce qui vous obligerait à installer php-intl.

Ceci est explicitement couvert de manière plus détaillée dans le documentation de Symfony Intl Component sous "Problèmes liés à l'ICU et au déploiement".

21
John Kary

Une solution concernant ce problème ou des problèmes similaires peut être trouvée ici: Problèmes liés à l'ICU et au déploiement

Le comportement de composer devrait être intelligent en sélectionnant le bon composant icu:

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

Il ne devrait y avoir (théoriquement) aucune erreur lors de l’installation de symfony 2.3. sans extension intl.

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 supérieur, mais le serveur est compilé> avec une version inférieure ICU version supérieure à 4.4)
  • l'extension intl est disponible sur les machines de développement mais pas sur le serveur.

Lorsque vous n'avez pas d'accès root à votre serveur de production, vous pouvez le réparer comme indiqué dans cet article. (tweaking composer.json)

J'espère que ces informations supplémentaires ont été utiles, car cela m'a aidé pour ce cas spécial dans différents environnements.

15
tweini

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

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.
9
lenybernard

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

Mise à niveau du compositeur.

php composer.phar self-update

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

extension=php_intl.dll

Et aussi supprimez les commentaires de ces deux lignes ci-dessous [intl] dans (php.ini):

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

Et redémarrez Apache2 bien sûr. :)

Informations complémentaires:

Si vous utilisez mac et que vous 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émarrez Apache.

6
Layton Everson

Une meilleure solution consiste à fixer votre composer.json à la version requise par le serveur de production. Tout d’abord, déterminez la version ICU sur le serveur: 1 2

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

Ensuite, corrigez le composant Icu de votre fichier composer.json sur une version correspondante:

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

Définissez la version sur "1.0 ." si l'extension intl n'est pas installée sur le serveur; "1.1." si le serveur est compilé avec ICU 4.2 ou une version inférieure.

Enfin, lancez

php composer.phar update symfony/icu

sur votre machine de développement, effectuez des tests approfondis et déployez-vous à nouveau. L'installation des dépendances va maintenant réussir.

5
thewbb