概要
cakephpをドキュメントルートに移動してパスを変更したら下記のようなエラーが出てうまく起動しない
—————-
Fatal error: You must enable the intl extension to use CakePHP. in /my_cake_php_dir/project/config/requirements.php on line 31
—————-
結論から言うとextension_dirのパスがエクステンションがないところを向いていたので修正したらなおった。
更新履歴
2019-04-12 phpinfoの箇所が消えていたので修正
やったこと
どうやらextension_loaded(‘intl’)がfalseになって出ているらしい。intlモジュールが読み込めないようだ。
コマンドライン上でモジュールは使えるみたいなのにphp上ではextension_loaded(‘intl’)がfalseになって困っていた。
# php -r "var_dump(extension_loaded('intl'));" PHP Warning: Module 'intl' already loaded in Unknown on line 0 bool(true) # php -m | grep -e intl -e mbstring -e SimpleXML intl mbstring SimpleXML
php.iniにエクステンションをパス指定して追加するも、上記エラーが出続ける
# vi /etc/php.ini ------------- extension = /usr/lib64/php/modules/intl.so -----------
extension_dirのパスがおかしい場合があると聞いてphp情報を表示させた。
<?php phpinfo(); ?>
extension_dirの箇所を見てみると、あまり覚えのないディレクトリが指定されている
extension_dir /usr/local/lib/php/extensions/no-debug-non-zts-20160303
ディレクトリ内容をみるけどそんなディレクトリないらしい
# ls -l /usr/local/lib/php/extensions/no-debug-non-zts-20160303 ls: cannot access /usr/local/lib/php/extensions/no-debug-non-zts-20160303: No such file or directory
そもそもintlエクステンションがどこにあるのか確認
# find / -name 'intl.so' /usr/lib64/php/modules/intl.so /usr/lib64/php-zts/modules/intl.so
php.iniの位置を調べてextension_dirを変更して再起動
# find / -name 'php.ini' /etc/php.ini # vi /etc/php.ini ------------------ (中略) ; extension_dir = "ext" extension_dir = "/usr/lib64/php/modules/" (略) ------------------ # service httpd restart
extension_dirパスが設定したものに変わって先のエラーも出なくなった。
ちなみに /usr/lib64/php-zts/modules/intl.so の方のディレクトリをextension_dir指定したところ、php –iniで下記のようなロードエラーが出たので何か違うものみたいだ。
# php --ini PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php-zts/modules/intl.so' - /usr/lib64/php-zts/modules/intl.so: undefined symbol: compiler_globals_id in Unknown on line 0 (中略)
おわり。