phpのintlモジュールが有効化されなかったけど解決した

概要

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のパスがエクステンションがないところを向いていたので修正したらなおった。

やったこと

どうやら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情報を表示させて見たところ、あまり覚えのないディレクトリが指定されている
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
(中略)