「PHP Warning: PHP Startup: Unable to load dynamic library ‘mysqli’」と警告が出たときの解決法
PHPのバージョンを7系から8系に引き上げてphpのバージョンを確認したら、こんなWarningが出るようになりました。
[dacelo@space ~]$ php -v PHP Warning: PHP Startup: Unable to load dynamic library 'mysqli' (tried: /usr/lib64/php/modules/mysqli (/usr/lib64/php/modules/mysqli: cannot open shared object file: No such file or directory), /usr/lib64/php/modules/mysqli.so (/usr/lib64/php/modules/mysqli.so: undefined symbol: mysqlnd_global_stats)) in Unknown on line 0 PHP 8.1.0RC4 (cli) (built: Oct 12 2021 23:53:13) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.1.0RC4, Copyright (c) Zend Technologies with Zend OPcache v8.1.0RC4, Copyright (c), by Zend Technologies
さてどういうことでしょうか。確認のため、このPATHを見に行ってみると、
[dacelo@space ~]$ ll /usr/lib64/php/modules/mysqli.so -rwxr-xr-x 1 root root 163456 10月 13 14:42 /usr/lib64/php/modules/mysqli.so
ちゃんとモジュールのファイルは存在しています。拡張子がないから?いやいや、このモジュールの読込の場合は、.so拡張子は省略可能なので、それもなさそう。
これが書いてある記述を確認しに行くと…
広告
[dacelo@space ~]$ view /etc/php.ini
; If you wish to have an extension loaded automatically, use the following ; syntax: ; ; extension=modulename ; ; For example: ; extension=mysqli ; ; When the extension library to load is not located in the default extension ; directory, You may specify an absolute path to the library file: ; ; extension=/path/to/extension/mysqli.so ; |
「デフォルト位置にない場合は、フルパスで記述せよ」と書いてありますので、一応その通りに
extension=/usr/lib64/php/modules/mysqli.so |
の記述に差し替えてみましたが、余計に変なエラーになりました。
PHP Warning: PHP Startup: Unable to load dynamic library ‘/usr/lib64/php/modules/mysqli.so’ (tried: /usr/lib64/php/modules/mysqli.so (/usr/lib64/php/modules/mysqli.so: undefined symbol: mysqlnd_global_stats), /usr/lib64/php/modules//usr/lib64/php/modules/mysqli.so.so (/usr/lib64/php/modules//usr/lib64/php/modules/mysqli.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
ここでググってみると、「エラーが出るので『extension=mysqli』の行頭に;を付けてコメントアウトしたら出なくなりました!解決!」とか書いているブログがコロコロと出てくるんですが、いやそりゃ読み込みをやめたらエラーもでなくなるけど、そしたらmysqlのモジュール使えなくなってるだろが、と思いもう少し考えてみました。
そういえばphpのモジュールは、まとめて放り込んである場所があります。
[dacelo@space ~]$ ll /etc/php.d/
合計 116
-rw-r–r– 1 root root 5808 10月 13 14:36 10-opcache.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-bz2.ini
-rw-r–r– 1 root root 54 10月 13 14:42 20-calendar.ini
-rw-r–r– 1 root root 48 10月 13 14:42 20-ctype.ini
-rw-r–r– 1 root root 46 10月 13 14:42 20-curl.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-dom.ini
-rw-r–r– 1 root root 46 10月 13 14:42 20-exif.ini
-rw-r–r– 1 root root 54 10月 13 14:42 20-fileinfo.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-ftp.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-gettext.ini
-rw-r–r– 1 root root 48 10月 13 14:42 20-iconv.ini
-rw-r–r– 1 root root 54 10月 13 14:42 20-mbstring.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-mysqlnd.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-pdo.ini
-rw-r–r– 1 root root 46 10月 13 14:42 20-phar.ini
-rw-r–r– 1 root root 56 10月 13 14:42 20-simplexml.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-sockets.ini
-rw-r–r– 1 root root 50 10月 13 14:42 20-sodium.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-sqlite3.ini
-rw-r–r– 1 root root 56 10月 13 14:42 20-tokenizer.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-xml.ini
-rw-r–r– 1 root root 56 10月 13 14:42 20-xmlwriter.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-xsl.ini
-rw-r–r– 1 root root 50 10月 15 17:29 30-mysqli.ini
-rw-r–r– 1 root root 56 10月 13 14:42 30-pdo_mysql.ini
-rw-r–r– 1 root root 58 10月 13 14:42 30-pdo_sqlite.ini
-rw-r–r– 1 root root 56 10月 13 14:42 30-xmlreader.ini
-rw-r–r– 1 root root 645 10月 13 14:42 opcache-default.blacklist
合計 116
-rw-r–r– 1 root root 5808 10月 13 14:36 10-opcache.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-bz2.ini
-rw-r–r– 1 root root 54 10月 13 14:42 20-calendar.ini
-rw-r–r– 1 root root 48 10月 13 14:42 20-ctype.ini
-rw-r–r– 1 root root 46 10月 13 14:42 20-curl.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-dom.ini
-rw-r–r– 1 root root 46 10月 13 14:42 20-exif.ini
-rw-r–r– 1 root root 54 10月 13 14:42 20-fileinfo.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-ftp.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-gettext.ini
-rw-r–r– 1 root root 48 10月 13 14:42 20-iconv.ini
-rw-r–r– 1 root root 54 10月 13 14:42 20-mbstring.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-mysqlnd.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-pdo.ini
-rw-r–r– 1 root root 46 10月 13 14:42 20-phar.ini
-rw-r–r– 1 root root 56 10月 13 14:42 20-simplexml.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-sockets.ini
-rw-r–r– 1 root root 50 10月 13 14:42 20-sodium.ini
-rw-r–r– 1 root root 52 10月 13 14:42 20-sqlite3.ini
-rw-r–r– 1 root root 56 10月 13 14:42 20-tokenizer.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-xml.ini
-rw-r–r– 1 root root 56 10月 13 14:42 20-xmlwriter.ini
-rw-r–r– 1 root root 44 10月 13 14:42 20-xsl.ini
-rw-r–r– 1 root root 50 10月 15 17:29 30-mysqli.ini
-rw-r–r– 1 root root 56 10月 13 14:42 30-pdo_mysql.ini
-rw-r–r– 1 root root 58 10月 13 14:42 30-pdo_sqlite.ini
-rw-r–r– 1 root root 56 10月 13 14:42 30-xmlreader.ini
-rw-r–r– 1 root root 645 10月 13 14:42 opcache-default.blacklist
お、ビンゴ。あるじゃないですかmysqli。この中を覗いてみると…
[dacelo@space ~]$ view /etc/php.d/30-mysqli.ini
; Enable mysqli extension module
extension=mysqli
extension=mysqli
なるほどそういうことね、ということで、/etc/php.ini の方のextensin=mysqliをコメントアウトしたら解決しました。(逆だとうまく行かなかった)
; If you wish to have an extension loaded automatically, use the following ; syntax: ; ; extension=modulename ; ; For example: ; ;extension=mysqli |
[dacelo@space ~]$ php -v PHP 8.1.0RC4 (cli) (built: Oct 12 2021 23:53:13) (NTS gcc x86_64) Copyright (c) The PHP Group Zend Engine v4.1.0RC4, Copyright (c) Zend Technologies with Zend OPcache v8.1.0RC4, Copyright (c), by Zend Technologies
これにて解決です。
Hi, I am SEO Expert and Programmer.
hi i am a blogger