CakePHPデプロイでPHP extension intlエラー

スポンサーリンク

Capistrano による CapkePHP アプリケーションのデプロイで発生したエラーへの対策。詳しくはデプロイ時の composer install 実行で、PHP に intl extension が入っていないためにエラーが発生しました。

— 環境 —
CakePHP 3.1.1
PHP 5.5.19
Composer 1.0
capistrano 3.4.0

【お知らせ】 英単語を画像イメージで楽に暗記できる辞書サイトを作りました。英語学習中の方は、ぜひご利用ください!
画像付き英語辞書 Imagict | 英単語をイメージで暗記
【開発記録】
英単語を画像イメージで暗記できる英語辞書サービスを作って公開しました
スポンサーリンク

cakephp 3.1.1 requires ext-intl エラー

capistrano でデプロイ実行したところ、以下のエラーログが表示されデプロイが失敗となった。

ヒントの箇所を抜粋しますと…

このエラーメッセージなので、PHP の extension である intl がシステム上で見つからないのが原因。ということで、以下解決策3つです。

1. PHP のコンパイル時に –enable-intl を指定

PHP のコンパイルが可能な環境であれば、intl の extension を有効にして PHP のコンパイルをやり直すと良いです。configure_option に –enable-intl を指定して、PHP のコンパイルをやり直します。詳細は以下、phpenv と php-build を使っている例です。

phpenvとphp-buildで新しいバージョンのPHP(5.5, 5.6)をインストール | EasyRamble

–enable-intl を付加して PHP をコンパイルすれば、intl extension が有効になるので解決。

公式ページのマニュアル。

PHP: インストール手順 – Manual

2. pecl で intl をインストールして php.ini で extension を指定

PHP の再コンパイルができない環境の場合は、intl をインストールした後に、php.ini に extension の場所を指定する方法でもOKです。root 権限があり sudo yum コマンド等が使える環境であれば、以下の手順で intl をインストールできる。

intl インストール。

php.ini の設定。

php.ini

以下ページ等が参考になります。

[PHP]Intlをソースからインストールする | 本日も乙
composer install で the requested PHP extension intl is missing from your system と言われる解決方法 – Qiita

3. intl をソースからインストールして php.ini で extension を指定

root 権限がなかったりレンタルサーバー環境などの場合は、intl をソースからインストールする必要がある。以下ページが参考になります。

さくらのレンタルサーバでCakePHP3を使うためにintl extensionを導入する方法 | ごろつきめも
さくらのレンタルサーバに Symfony2 を入れようとして嵌った件 – Qiita

上記 Qiita 記事を参考にして、まずは ~/local/ 以下等に intl をソースからインストールします。その後、php.ini に intl.so の場所を extension として指定。

php.ini

これで PHP の intl extension が有効になる。

表題のエラーを解決した方法

intl をインストールした後、php.ini で intl extension を指定しました。そのため composer install コマンド実行でエラーが発生していたので、composer コマンド自体の php(php-cli)コマンドの実行で、php.ini を読み込むオプションを付加して php(実際には php-cli コマンド)を実行するように修正した。具体的には以下のとおり -c /path/to/php.ini のオプションを付加。

/usr/local/bin/composer

これでエラーが解決して、composer install が正しく動作して、Capistrano によるデプロイを上手く実行できるようになった。ここで作成した composer コマンドについての詳細は以下を参照。

Composer should be invoked via the CLI version of PHP, not the cgi-fcgi SAPI | EasyRamble
SSHKit::Runner::ExecuteError/composer stdout: Nothing written | EasyRamble

最後におまけ、PHP で intl extension(intl 拡張)が有効になっているか確認する方法です。

これで上記のように intl が表示されれば有効になっています。

特定の php.ini を読み込んで確認する場合。

または、phpinfo() で intl が出力されるかどうかでも確認可能です。

スポンサーリンク
私は Ruby on Rails の前は、PHP & CakePHP を使っていました(今も使いますけど)。PHP についてはオライリーの本を中心に軽く10冊以上は読み込みました。
 
スポンサーリンク

Leave Your Message!