1. ホーム
  2. php

[解決済み] Symfony 2.3.x を Composer 経由でインストールした際の lib-icu 依存性の問題

2022-09-11 12:31:39

質問

Composerを使ってSymfony 2.2.xをインストールすることに何の問題もありませんでした。 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 拡張をインストールして設定します。PHP5.3ではIntl拡張がデフォルトで配布されていますが、MAMPのようにIntlがないディストリビューションもあるので、取得する必要があります。私が使用したのは PEAR :

私の手順

  • Intl 拡張 (PECL によってメンテナンスされています) をインストールします。 $ pear install pecl/intl - 最初に pear に 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.[version].ini で簡単にphp.iniを編集することができます。

コマンドラインです。

  • Composer もしくは symfony のコンソール CLI を使う場合、Intl も必要で、そのために php CLI は通常異なる php.ini を使用するので、そこにも extension ディレクティブを追加することになります。CLI の php.ini を見つけるには、単に次のようにします。 $ php -i |grep php\.ini を実行してファイルパスを調べ、そこに extension=intl.so をその php.ini にも追加します。
  • Intl がインストールされているかどうかを確認するには、次のようにします。 $ php -m を実行して、利用可能なモジュールを確認します。

どのように解決するのですか?

を更新してください。 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 を実行すると、拡張機能が正常に有効化されます。

phpから現在のintlのバージョンを確認します。

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


注意:もう必要ありません ( symfony 2.3 はリリースされました。 )

のように、依存関係に最小安定性フラグ@devまたは@rcを追加してください。

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

composerのデフォルトの安定性はstableで、symfony 2.3のブランチは現在stableではありません( @rcです)。安定性のフラグについてもっと読む はこちら .