先日、ComposerでCodeIgniter4をインストールしようとしていたら【intl拡張モジュールが足りないからインストールできない】という趣旨のエラーメッセージが表示されました。
require ext-intl * -> it is missing from your system. Install or enable PHP's intl extension.
このエラーはPHPの拡張モジュールが足りないという意味のエラーなので、Composerを使ったインストールであればCodeIgniterだけではなく他のソフトのインストールや動作でも起こります。
今回はこのエラーを解決して無事にCodeIgniter4をインストールするまでにやったことを記録しておきたいと思います。
この記事ではCodeIgniterを例に挙げて解説しますが、他のソフトでも同様の手順で解決できるので各自ご自分の環境に置きかえて応用してください。
composer installのintl拡張モジュール不足エラー
【composer install】で発生したエラーは以下のようなもの。
>composer create-project codeigniter4/appstarter ci4
Creating a "codeigniter4/appstarter" project at "./ci4"
Info from https://repo.packagist.org: #StandWithUkraine
Installing codeigniter4/appstarter (v4.2.10)
- Downloading codeigniter4/appstarter (v4.2.10)
- Installing codeigniter4/appstarter (v4.2.10): Extracting archive
Created project in C:\******\ci4
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.
Problem 1
- codeigniter4/framework[4.0.0, ..., v4.2.10] require ext-intl * -> it is missing from your system. Install or enable PHP's intl extension.
- Root composer.json requires codeigniter4/framework ^4.0 -> satisfiable by codeigniter4/framework[4.0.0, ..., v4.2.10].
To enable extensions, verify that they are enabled in your .ini files:
- C:\********\php.ini
You can also run `php --ini` in a terminal to see which files are used by PHP in CLI mode.
Alternatively, you can run Composer with `--ignore-platform-req=ext-intl` to temporarily ignore these required extensions.
これはつまり、PHPの拡張モジュールが足りていないという趣旨のエラーです。今回の場合はintl拡張モジュールが足りていません。
PHPで有効な拡張モジュールの確認その1【コマンドプロンプト】
xamppなどであればphpinfo()をブラウザに表示させて確認するのが一般的ですが、今回はコマンドプロンプトでの確認方法を紹介します。
なお、WindowsにPHPがインストール済みでパスも通してある前提です。まだの方は以下の記事を参考にしてみて下さい。
windowsでPHPのパスを通してある場合などはかなり便利に使うことができます。
>php -m
[PHP Modules]
bcmath
calendar
Core
ctype
・
・
(中略)
・
・
zip
zlib
[Zend Modules]
上記のようにコマンドプロンプトで【php -m】を実行すれば、現在有効な拡張モジュールの一覧が表示されます。目当ての拡張モジュールが有効かどうか確認しましょう。
今回はintl拡張モジュールが必要でしたが、この一覧にはありませんでした。
PHPで有効な拡張モジュールの確認その2【コマンドプロンプト】
PHPで拡張モジュールを確認する方法はもう一つあります。【php –ri (モジュール名)】というコマンドで、モジュール名を指定する方法です。
この場合、以下のように有効/無効が確認できます。
有効な場合
有効な場合は【enabled 】という表示とともに、バージョンなどの情報が表示されます。
C:\Users\sophy>php --ri intl
intl
Internationalization support => enabled
ICU version => 70.1
ICU Data version => 70.1
ICU Unicode version => 14.0
Directive => Local Value => Master Value
intl.default_locale => no value => no value
intl.error_level => 0 => 0
intl.use_exceptions => Off => Off
無効な場合
有効でない旨の表示がされます。
>php --ri intl
Extension 'intl' not present.
WindowsでPHPの拡張モジュールを有効にする
WindowsでPHPの拡張モジュールを有効にするには、以下の条件が必要になります。
- php.iniでのextension設定を有効化
- 拡張モジュールのフォルダに該当のdllが存在する
では、ひとつずつ見ていきます。
php.iniでのextension設定を有効化
PHPの設定の全てを決定しているのは【php.ini】です。このファイルがどこにあるかが忘れてしまいがちなのですが、コマンドプロンプトから【php –ini】コマンドで調べることができます。
>php --ini
Configuration File (php.ini) Path:
Loaded Configuration File: C:\********\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed: (none)
上記コマンドでphp.iniの場所が一覧となって表示されるので、該当のファイルを書き変えます。
(中略)
;extension=intl
↓ 行頭のカンマを外してコメントアウトを解除
extension=intl
(中略)
これでintl拡張モジュールが有効になります。
他のモジュールを有効にしたい場合はこの手順に従って該当のモジュールをコメントアウトします。お目当てのモジュールがコメントでも記載されていない場合は新たに追記して下さい。
拡張モジュールのフォルダに該当のdllが存在する
php.iniで拡張モジュールが有効化された上で、拡張モジュール用のフォルダに該当モジュールのdllファイルがあればPHPはそのモジュールを認識します。
凡そのモジュールはPHPのインストール時にインストールされています。使用・未使用に限らずインストールされているので、多くの場合は上記iniファイルでモジュールを有効にするだけで動作するでしょう。
デフォルトでインストールされないモジュールについて
一部デフォルトでインストールされていないモジュールに関しては、Windows用のdllファイルを入手してきて拡張モジュールのフォルダに配置します。Lixux用のファイルでは動作しませんので注意して下さい。
拡張モジュールの格納フォルダと命名規則
intl拡張モジュールであれば【php_intl.dll】という名前で保存されています。
格納場所はPHP設定の【extension_dir】で設定されています。デフォルトでは【(PHPのインストールフォルダ\ext)】です。
extension_dirの値を知りたい場合は以下のコマンドを実行してみて下さい。
>php -i | findstr extension_dir
extension_dir => ext => ext
まとめ
さて、composerでCodeIgniterをインストールしようとした時はintlモジュールだけで動作するようになりました。大抵の場合は上記拡張モジュールを適切に有効化することでエラーが解消されます。
最後までお読みいただきありがとうございました。
コメント