web-dev-qa-db-ja.com

Composer経由でSymfony 2.3.xをインストールする際のlib-icu依存関係の問題

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 extension を提供していませんでしたlib-icu

とても簡単で、int拡張機能をインストールして設定します。 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を見つけられなかったため、手動でextension=intl.soをphp.iniに追加する必要がありました。 MAMPでは、[ファイル]> [テンプレートの編集]> [php。[バージョン] .ini]に移動して、php.iniを簡単に編集できます。

コマンドライン:

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

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です)。安定性フラグの詳細を読む こちら

114

多くのアプリケーションは「en」ロケールのみをサポートし、翻訳機能やphp-intlは必要ありません。これがあなたの場合、またはサーバーにphp-intlをインストールできない場合は、composer.jsonsymfony/ic 〜1.0を明示的に追加できます。 1.0はphp-intlを必要としませんが、1.1 +は必要です。

翻訳機能が必要ない場合:

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

この宣言なしでsymfony/symfony 2.3をインストールしようとするとComposerはphp-intlをインストールする必要があるsymfony/icu〜1.2をインストールしようとする場合があります。

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

21
John Kary

この問題または同様の問題に関する解決策は、次の場所にあります。 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拡張は、開発マシンでは使用できますが、サーバーでは使用できません。

本番サーバーへのルートアクセス権がない場合は、この記事で説明されているように修正できます。 (composer.jsonの調整)

さまざまな環境でのこの特別な場合に役立つので、この追加情報が役に立てば幸いです。

15
tweini

Mac OS Mavericksには、PHP 5.4.17が付属しています。これを取得するには、次の手順に従う必要があります。

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

この答えはこの人の問題に対する正しい答えではないかもしれないことは知っていますが、同じタイトルでの私の問題の解決策でした。 php.iniでintl拡張機能を有効にし、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を使用してHomebrewでphpをインストールした場合は、次の手順を実行します。

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

6
Layton Everson

より良い解決策は、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 .」に設定し、サーバーがICU 4.2以前でコンパイルされている場合は「1.1。」を設定します。

最後に、実行

php composer.phar update symfony/icu

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

5
thewbb