Composerを介してSymfony 2.3.xをインストールするときのlib-icu依存関係の問題


112

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の国際拡張を提供LIB-ICUを

非常に簡単で、intl拡張機能をインストールして構成します。PHP 5.3以降、Intl拡張機能はデフォルトで配布されますが、MAMPなどの一部の配布にはIntlがないため、取得する必要があります。私はPEARを使用しました:

私のステップ:

  • Intl拡張機能(PECLが管理)をインストールします$ pear install pecl/intl。—最初にpeclチャネルをpearに追加する必要がある場合があります。
  • MAMPを使用していて、pear / pecl を使用したことがない場合は、lullabotの役立つブログ投稿を確認してください。MAMPにはphpソースが同梱されていないため、phpバージョンのソースダウンロードして、ソースを/Applications/MAMP/bin/php/php[version]/include/php(ブログ投稿で説明されているように)に移動する必要があります。
  • PEARがphp.iniを見つけられなかったため、php.iniに手動で追加extension=intl.soする必要がありました。MAMPでは、[ファイル]> [テンプレートの編集]> [php。[version] .ini]に移動して、php.iniを簡単に編集できます。

コマンドライン:

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

どのOSを使用していますか?次に、intl拡張機能を更新する方法に関する情報を提供できます。
NicolaiFröhlich2013年

PHP 5.2.xとの互換性のため、pecl / intlは使用しないでください。PHP 5.3以降、Intlはコア拡張機能です。
ジェローム・Vieilledent

2
@JérômeVieilledent現在のMAMPディストリビューションにはIntlがバンドルされていないようです。これにより、PECLを使用してビルドするオプションが残されますphp.net/manual/en/intl.installation.php
Mark Fox

回答:


118

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()AND 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のデフォルトの安定性は安定していますが、symfony 2.3ブランチは現在は安定していません(それは@rcです)。安定性フラグの詳細については、こちらをご覧ください


素晴らしい記事。Composerのドキュメントでは、安定性のフラグが機能しているとしたら、どうなるかはわかりませんでした。
マークフォックス

PEAR / PECL経由でphp-intlをインストールしました。何らかの理由でINTL::…失敗します。しかし、ブラウザでphpinfo()を使用すると、Intlがインストールされていて、ICUバージョンが49.xであることがわかります。ただし、Composerは引き続き同じエラーメッセージで失敗します。
マークフォックス

どのオペレーティングシステム たとえば、ubuntuでの「sudo aptitude install php5-intl」。php.iniで有効になっている拡張機能。コマンドラインからphp -mで表示できますか?
NicolaiFröhlich2013年

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をインストールしようとすると、Composerはsymfony / icu〜1.2をインストールしようとする場合があり、php-intlをインストールする必要があります。

これはSymfony Intl Componentのドキュメントの「ICUとデプロイメントの問題」でより広範囲に明示的にカバーされています。


1
これをありがとう。Symfony2がオプションであるべき機能のインストールをシャットダウンし、多くの環境にインストールされないのは不合理です。
Acyra 2013

申し訳ありませんが、それは真実ではありません。symfony 2.3をインストールすると設定がイントロスペクトされ、正しいicu-componentが決定されます。シャットダウンしません。
tweini 2013

POC composer.json:"require":{"symfony/symfony": "v2.3.3"}}結果: ´パッケージ情報を含むcomposerリポジトリーのロード依存関係のインストール(require-devを含む)-psr / log(1.0.0)のインストールダウンロード:100%-twig / twig(v1.13.2)のインストールダウンロード:100% -doctrine / common(2.3.0)のインストールダウンロード:100%-symfony / symfony(v2.3.3)のインストールダウンロード:100%-symfony / icu(v1.0.0)のインストールダウンロード:100%ロックファイルの書き込みオートロードファイルの生成
tweini

1
ドキュメントで説明されているように、composer.lockIntlのバージョンが異なる(または存在しない)環境間でを共有すると、問題が発生します。
タムリン2013年

これをありがとう!指を交差させることで、GoDaddyを使用しているクライアントのためにSymfony2プロジェクトを実行できます
Matt

15

この問題または同様の問題に関する解決策は、ここにあります:ICUおよび展開の問題

composerの動作は、適切なicuコンポーネントをインテリジェントに選択する必要があります。

  • symfony / icu 1.0。*:intl拡張が利用できない場合
  • symfony / icu 1.1。*:intlがICU 4.0以降でコンパイルされている場合
  • symfony / icu 1.2。*:intlがICU 4.4以降でコンパイルされている場合

(理論的には)symfony 2.3のインストールにエラーはないはずです。intl-extensionなし。

ただし、この記事で説明したように、開発環境が本番サーバーと異なる場合は、トラップされる可能性があります。

  • 開発マシンはICU 4.4以降でコンパイルされていますが、サーバーは4.4よりも低いICUバージョンでコンパイルされています
  • intl拡張は開発マシンで利用できますが、サーバーでは利用できません。

本番サーバーへのrootアクセスがない場合は、この記事で説明されているように修正できます。(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

この答えがこの人の問題に対する正しい答えではない可能性があることは知っていますが、同じタイトルの問題の解決策でした。php.iniでintl拡張を有効にしてcomposerをアップグレードすることで、この問題を自分で解決できました。

composerをアップグレードしています。

php composer.phar self-update

この行(php.ini内)からコメントを削除します。

extension=php_intl.dll

また、(php.ini)の[intl]の下にある次の2行のコメントを削除します。

[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を再起動します。


1
これはWindowsの修正のようです;-)
Mark Fox

1
はい、私はWindowsを使用していますが、それは「Windowsの修正」ではなく、phpの設定とcomposerの更新の修正です。LinuxまたはMacのボックスでも同じ手順を実行する必要がある場合があります。
レイトンエバーソン2013年

正しい。おそらく、そのときに使用しているphp / apacheディストリビューションについて言及する必要があります。あなたの場合、intl拡張機能がバンドルされており、有効にする必要があるだけです。これは、同じディストリビューションパッケージを使用している人にとっては朗報です。
マークフォックス

1
良い点マークフォックス。ここで私たちはそれを必要とする人のためのものです。私はWindows 8ボックスでapachefriendsからのXAMPPスタックを使用しています。(バージョン1.8)
レイトンエバーソン2013年

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

次に、composer.jsonファイルのIcuコンポーネントを一致するバージョンに修正します。

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

サーバーにintl拡張がインストールされていない場合は、バージョンを「1.0」に設定します。"1.1。 "サーバーがICU 4.2以下でコンパイルされている場合。

最後に、実行します

php composer.phar update symfony/icu

開発マシンで広範囲にテストして、再度デプロイします。依存関係のインストールが成功します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.