2026年9月9日
2026年9月9日
WordPressでPHPのマルチバイト関数(mb_*)が使えないときの原因と対処方法
「Call to undefined function mb_strimwidth()」のようなエラーが出る場合、そのサーバーのPHPで mbstring 拡張モジュールが有効になっていません。対処は、実際にWordPressを動かしているPHPで mbstring を有効にすることです。この記事では、エラーの読み方と、本当に無効なのかを確かめる方法、レンタルサーバー・VPS・ローカル環境・Dockerそれぞれでの有効化手順を、よくある原因の順に説明します。
エラーの読み方と影響の範囲
mbstring が無いときの典型的な症状は次のとおりです。
- 画面やログに「PHP Fatal error: Uncaught Error: Call to undefined function mb_xxx()」と出て、ページが表示されない
- 「サイトに重大なエラーがありました」と表示され、管理者宛てのメールにエラーの場所が書かれている
- 「ツール」→「サイトヘルス」で、推奨されるPHPモジュールとして mbstring が無いことを指摘される
エラーメッセージには、関数を呼び出したファイルのパスが含まれます。wp-content/plugins/プラグイン名/ や wp-content/themes/テーマ名/ の部分を見れば、どのプラグインやテーマが mbstring を必要としているかが分かります。
なお、WordPress本体は mbstring が無くても最低限動くように作られています。mb_substr() や mb_strlen() など一部の関数については、本体が代わりの関数を用意しているためです。そのため「サイトは動くのに、特定のプラグインを有効にした途端に止まる」という形で問題が表面化することがよくあります。代わりの関数はUTF-8の基本的な処理に限られるので、日本語サイトでは mbstring を有効にしておくのが前提と考えてください。
まず「WordPressが使っているPHP」で確認する
よくあるつまずきが、ターミナルで php -m を実行して「mbstring はある」と判断してしまうことです。コマンドラインのPHP(CLI)と、Webサーバー経由で動くPHP(PHP-FPMやApacheのモジュール)は、設定ファイルやバージョンが別になっていることがあります。
WordPressから見た状態を確認するには、サイトヘルスの指摘を見るのがもっとも手軽です。サイトヘルスの「情報」タブの「サーバー」欄では、PHPのバージョンや実行方式(SAPI)も確認できます。
もっと詳しく調べたい場合は、一時的なファイルで確認します。
<?php
// check-mb.php として公開ディレクトリに置き、確認後すぐに削除する
header( 'Content-Type: text/plain; charset=UTF-8' );
echo 'PHP ' . PHP_VERSION . ' / ' . PHP_SAPI . "\n";
echo 'mbstring: ' . ( extension_loaded( 'mbstring' ) ? 'enabled' : 'disabled' ) . "\n";
echo 'php.ini: ' . php_ini_loaded_file() . "\n";
このファイルはサーバーの情報を外部に見せてしまうため、確認が終わったらすぐに削除してください。phpinfo() を使う方法もありますが、表示される情報がさらに多いので、同様に削除を忘れないようにします。
原因1:PHPのバージョンを切り替えたときに拡張が有効になっていない
レンタルサーバーやVPSでPHPのバージョンを上げた直後に起きやすいのがこのケースです。PHPはバージョンごとに設定ファイルと拡張モジュールが分かれていることが多く、旧バージョンで有効だった mbstring が新バージョンでは入っていない、ということがあります。
レンタルサーバーでは、mbstring は標準で有効になっていることがほとんどです。それでもエラーが出る場合は、サーバーの管理画面で、サイトに割り当てられているPHPのバージョンと、拡張モジュールやphp.iniの設定項目を確認します。設定画面の構成はサーバー会社によって異なるため、各社のマニュアルで「PHPのバージョン設定」「php.ini設定」を探してください。自分で変更できない場合は、サポートに mbstring の有効化を依頼します。
原因2:VPS・自前サーバーでパッケージが入っていない
VPSなどでPHPを自分で入れた場合、mbstring は別パッケージになっていることがあります。
# Debian / Ubuntu(PHPのバージョンは環境に合わせて置き換える)
sudo apt update
sudo apt install php8.3-mbstring
sudo systemctl restart php8.3-fpm
# RHEL / AlmaLinux / Rocky Linux など
sudo dnf install php-mbstring
sudo systemctl restart php-fpm
パッケージ名やサービス名は、ディストリビューション、PHPの導入方法(標準リポジトリか追加リポジトリか)、Webサーバーの構成によって異なります。上の例をそのまま実行するのではなく、php -v や systemctl list-units | grep php で、実際に動いているPHPのバージョンとサービス名を確認してから読み替えてください。Apacheのモジュールとして動かしている場合は、PHP-FPMではなくApacheを再起動します。
インストール後は、先ほどの確認用ファイルやサイトヘルスで、Webサーバー側でも有効になったかを確認します。
原因3:php.ini で拡張が無効にされている
パッケージは入っているのに読み込まれていない場合は、設定ファイルを確認します。
- Debian / Ubuntu:
/etc/php/バージョン/mods-available/mbstring.iniがあるのに有効になっていなければ、sudo phpenmod mbstringで有効にし、PHP-FPMまたはApacheを再起動します。 - XAMPPなどのWindowsのローカル環境:
php.iniの;extension=mbstringの先頭の;を外して保存し、Apacheを再起動します。 - その他: 確認用ファイルで表示した
php.iniのパスを開き、extension=mbstringが無効になっていないか、disable_functionsにmb_で始まる関数が並んでいないかを確認します。
disable_functions で関数が止められているのは珍しいケースですが、共用サーバーやセキュリティ設定を強めたサーバーでは見かけることがあります。
原因4:Dockerのイメージや独自ビルドのPHP
Docker Hubの公式 php イメージや wordpress イメージでは、mbstring は標準で組み込まれています。それでも使えない場合は、Alpine系の最小構成イメージを自分で組んでいる、あるいは別の配布元のイメージを使っている可能性があります。Dockerfileでどのイメージを元にしているか、拡張を追加する手順がイメージのドキュメントにどう書かれているかを確認してください。PHPをソースからビルドしている場合は、mbstring を有効にするオプションを付けてビルドし直す必要があります。
自作コードでの備え
自分で書いたテーマやプラグインで mb_* 関数を使う場合は、拡張が無い環境で致命的なエラーにならない書き方にしておくと安心です。
<?php
// 子テーマの functions.php などで使う例
function my_trim_title( $text, $width = 40 ) {
if ( function_exists( 'mb_strimwidth' ) ) {
return mb_strimwidth( $text, 0, $width, '…', 'UTF-8' );
}
// mbstring が無い環境では、本体の互換関数で動く wp_html_excerpt() で代用する
// (幅ではなく文字数で切るため、全角・半角の混在で長さが変わる)
return wp_html_excerpt( $text, (int) ( $width / 2 ), '…' );
}
Composerで依存関係を管理しているプラグインなら、symfony/polyfill-mbstring を導入して代替実装を用意する方法もあります。ただし、ポリフィルは本来の拡張より遅く、すべての関数を同じ精度で再現するものではありません。運用中のサーバーでは、拡張そのものを有効にするのが本筋です。
また、PHP 8.0 で mbstring.func_overload の設定は削除されています。古い解説記事にある「func_overload を有効にする」といった手順は、現在のPHPには当てはまりません。
まとめ
Call to undefined function mb_xxx()は、WordPressを動かしているPHPで mbstring が無効という意味- CLIの
php -mではなく、サイトヘルスや一時的な確認用ファイルでWebサーバー側のPHPを確認する - PHPのバージョン切り替え直後は、新しいバージョンで拡張が有効かを確認する
- VPSではパッケージの導入とPHP-FPMの再起動、ローカル環境ではphp.iniの修正で対処する
- 自作コードは
function_exists()で備え、確認用ファイルは使い終わったら削除する
PHPのバージョン表記やパッケージ名は2026年10月現在の一般的な例です。サーバー会社や配布元の最新の案内もあわせて確認してください。