PHPエラー「Call to undefined function mb_language()」の原因と解決方法
Windows版PHPでmb_language()関数など、mb_xxxというパターンの「mbから始まる関数」を使おうとすると、
PHP Fatal error: Call to undefined function mb_language() in C:\test\mail.php on line 24
といったエラーになることがある。
このエラーの原因は、php.iniファイルでphp_mbstring.dllというPHP拡張モジュールの読み込みを行う設定が有効になっていないことにある。
php.iniファイルを確認し、
;extension=php_mbstring.dll
といったように、extensionの左側にセミコロン(;)が付いている場合は、php_mbstring.dllというモジュール(ファイル)を読み込む設定になっていない。
モジュールを読み込む設定にするには、extensionの左側のセミコロン(;)を削除し、
extension=php_mbstring.dll
とすれば良い。
しかし、これだけでは、まだ解決しない場合がある。
以下のように「指定されたモジュールが見つかりません」という新たなエラーメッセージが表示されることがある。
PHP Warning: PHP Startup: Unable to load dynamic library './php_mbstring.dll' - 指定されたモジュールが見つかりません。 in Unknown on line 0
PHP Fatal error: Call to undefined function mb_language() in C:\test\mail.php on line 24
このエラーの原因は、主に2つの可能性が考えられる。
(1)php_mbstring.dllが本当に存在しない。(このファイルを削除してしまった、あるいは、最初から存在しない。)
(2)php_mbstring.dllの在り処がPHPからは分からない。
もし、(1)が原因の場合は、ファイルを設置することでエラーを解決できる。
(2)が原因かどうかについては、php.iniファイルを見ることで分かる。
php.iniファイルを確認し、extension_dirで指定された「パス」がphp_mbstring.dllの在り処と一致していればよい。
一致していない場合は、extension_dirのパスをPHP拡張モジュールが存在するパスと一致するように修正をすれば、問題は解決する。
例えば、php.iniファイルで、
extension_dir = "./"
となっている場合は、PHPインストールフォルダの直下にphp_mbstring.dllファイルが存在することになる。
もし、PHPインストールフォルダが「C:\php」で、extension_dirが「./」という指定になっている場合は、php_mbstring.dllは「C:\php」直下に存在するべきである。
もし、php_mbstring.dllが「C:\php\ext」直下に存在する場合は、
extension_dir = "./ext"
というように、extension_dirでphp_mbstring.dllが存在するフォルダを指定してやればよい。
《関連リンク》
・Windows版PHPでphp_mbstring.dllが見つからない場合のエラーの原因と解決方法の1つ
・PHPエラー「Fatal error: Call to undefined function mb_convert_encoding()」の原因と解決方法(Windows用PHP)