PHPの「Unable to load dynamic library」を解消する方法
とある案件の管理用サーバーの検証環境構築時の出来事。
本番環境の管理サーバーのPHPバージョンなどを確認しながら検証環境構築を進めておりました。
その環境ではPHP5.3を利用しており正常に動作しているものの、実は裏で警告が出てました。
(この時点で「正常」ではないのですが・・・)
※ちなみにPHP7系に後日移行予定です。
似た内容の記事がすでにQiitaに存在するかと思うのですが、僕なりの解消手順、作業ログとして記事にすることにしました。
環境
- AWS t2.micro EC2インスタンス
- Amazon Linux AMI release 2018.03
- Apache/2.2.34 (Unix)
- PHP 5.3.29
警告内容
$ php -v
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php_pdo.dll' - /usr/lib64/php/modules/php_pdo.dll: cannot open shared object file: No such file or directory in Unknown on line 0
PHP 5.3.29 (cli) (built: May 12 2015 22:42:19)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
PHP自体は動作しているが、ライブラリをロードできない旨の警告が出ている。
またまた。そんなわけないじゃーん。
$ ll /usr/lib64/php/modules/ | grep php_pdo
ほんまや(°▽°)
ちゃんとライブラリ無いね笑
修正
phpの設定ファイルを確認してみた
$ php --ini | head -n5
PHP Warning: PHP Startup: Unable to load dynamic library '/usr/lib64/php/modules/php_pdo.dll' - /usr/lib64/php/modules/php_pdo.dll: cannot open shared object file: No such file or directory in Unknown on line 0
Configuration File (php.ini) Path: /etc
Loaded Configuration File: /etc/php.ini
Scan for additional .ini files in: /etc/php.d
Additional .ini files parsed: /etc/php.d/curl.ini,
/etc/php.d/fileinfo.ini,
/etc/php.ini
を修正するよ
$ sudo su
$ vi /etc/php.ini
ぺろぺろと修正。。。
以下のようにしました
$ cat /etc/php.ini | grep php_pdo -n1
927-; Fix: Unable to load dynamic library error.
928:; extension=php_pdo.dll
929-
extension=php_pdo.dll
の行が不要でした。
恐らく、参考になるサイトを見ながらPHPの導入を行ったので、不必要なライブラリを読み込む設定を追加したのだろう。。。
コメントアウトし、1つ上の行にコメントを入れました。
この後、exit
コマンドでrootから抜けました。
修正完了
httpdプロセス再起動
$ sudo service httpd restart
Stopping httpd: [ OK ]
Starting httpd: [ OK ]
再起動完了!!
PHPの動作を確認してみる。
バージョンの確認コマンドでも--ini
オプションでもなんでも良いと思います。実行します。
$ php -v
PHP 5.3.29 (cli) (built: May 12 2015 22:42:19)
Copyright (c) 1997-2014 The PHP Group
Zend Engine v2.3.0, Copyright (c) 1998-2014 Zend Technologies
無事、警告が解消されましたね。
さいごに
今回、手元の環境では設定の誤りが原因で存在しないphp_pdo.dll
ライブラリを読み込もうとして警告を履いておりましたが、異なるライブラリでもロード時の警告が発生し得ます。
なので、ls -la [警告に表示されたライブラリへのパス]
などで参照できるか確認後、php.iniの設定に誤りが無いか確認してみてください。
(´-`).。oO(早めにPHP7に移行しないとなぁ。。。)