PHPエラー「PHP Fatal error: Call to undefined function mb_substr_count()」の原因と解決方法
CentOS 6でパッケージインストールしたPHP 5.3.3の環境でPHPプログラミングをしていて、mb_substr_count関数を使って、文字列内に含まれるある文字の数を数えようとすると、
PHP Fatal error: Call to undefined function mb_substr_count()
というエラーが発生した。
<プログラム例>
php -r "echo mb_substr_count('book','o');"
<エラーメッセージ>
PHP Fatal error:  Call to undefined function mb_substr_count() in Command line code on line 1
エラーメッセージとしては、
PHP 致命的エラー:未定義の関数「mb_substr_count」の呼び出し
といった意味のようだが、mb_substr_count関数は、PHP 5では使用できるはず。
それが使用できないとなると、mb_substr_count関数を定義しているPHPライブラリのインストールができていない可能性がある。
「mb_」で始まる関数であるため、mbstringがインストールされている必要がありそうだ。
<php-mbstringのインストール状況確認>
# php -m | grep mbstring
→何も表示されなかったので、mbstringパッケージが使えないことが分かる。
# rpm -qa php
php-5.3.3-40.el6_6.x86_64
→php-mbstringはヒットしないので、php-mbstringパッケージがインストールされていないことが分かる。
<php-mbstringのインストール>
# yum install php-mbstring
読み込んだプラグイン:fastestmirror
インストール処理の設定をしています
Determining fastest mirrors
 * base: ftp.tsukuba.wide.ad.jp
 * extras: ftp.tsukuba.wide.ad.jp
 * updates: ftp.tsukuba.wide.ad.jp
base                                                     | 3.7 kB     00:00
extras                                                   | 3.4 kB     00:00
extras/primary_db                                        |  31 kB     00:00
updates                                                  | 3.4 kB     00:00
updates/primary_db                                       | 3.3 MB     00:01
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> Package php-mbstring.x86_64 0:5.3.3-40.el6_6 will be インストール
--> 依存性解決を終了しました。
依存性を解決しました
================================================================================
 パッケージ          アーキテクチャ
                                   バージョン              リポジトリー    容量
================================================================================
インストールしています:
 php-mbstring        x86_64        5.3.3-40.el6_6          updates        458 k
トランザクションの要約
================================================================================
インストール         1 パッケージ
総ダウンロード容量: 458 k
インストール済み容量: 2.1 M
これでいいですか? [y/N]y
パッケージをダウンロードしています:
php-mbstring-5.3.3-40.el6_6.x86_64.rpm                   | 458 kB     00:00
rpm_check_debug を実行しています
トランザクションのテストを実行しています
トランザクションのテストを成功しました
トランザクションを実行しています
  インストールしています  : php-mbstring-5.3.3-40.el6_6.x86_64              1/1
  Verifying               : php-mbstring-5.3.3-40.el6_6.x86_64              1/1
インストール:
  php-mbstring.x86_64 0:5.3.3-40.el6_6
完了しました!
<php-mbstringのインストール状況確認>
# php -m | grep mbstring
mbstring
→mbstringパッケージがインストールされたことが分かる。
# rpm -qa php-mbstring
php-mbstring-5.3.3-40.el6_6.x86_64
→php-mbstringパッケージがインストールされたことが分かる。
<関数mb_substr_countの実行>
# php -r "echo mb_substr_count('book','o');"
2
→PHPエラーが出なくなり、期待通りの動作をするようになった。
以上のことより、PHPエラー「PHP Fatal error: Call to undefined function mb_substr_count()」の原因は、php-mbstringパッケージがインストールされていないことにあることが分かった。
従って、解決方法は、php-mbstringパッケージをインストールすること、になる。