【PHP】mb_convert_encoding()のエラー対応方法

【PHP】mb_convert_encoding()のエラー対応方法 サーバー
PHP Fatal error:  Uncaught Error: Call to undefined function mb_convert_encoding()

「上記のようなエラーが出てしまう・・・」
「PHPでmbstring関数を利用したい」

このような場合には、この記事が参考となります。
この記事では、PHPでmbstring関数を利用するための方法を解説しています。

本記事の内容

  • mb_convert_encoding()でエラーが出る原因
  • PHP mbstring拡張モジュール(php-curl)のインストール
  • PHP mbstring拡張モジュールの有効化
  • mbstring関数の動作確認

それでは、上記に沿って解説していきます。

mb_convert_encoding()でエラーが出る原因

mb_convert_encoding()のエラーが出るとは、PHPでmbstring関数が使えないということです。
PHPでmbstring関数が使えない原因は、以下の2つが考えられます。

  • PHP mbstring拡張モジュールがインストールされていない
  • PHP mbstring拡張モジュールが有効化されていない

それぞれを下記で説明します。

PHP mbstring拡張モジュールがインストールされていない

まずは、mbstring拡張モジュールの未インストールを疑いましょう。
インストールの有無は、次の方法で確認できます。

$ ls /usr/lib/php/20190902 | grep mbstring

mbstring拡張モジュールが存在していれば、共有ライブラリが存在しています。
あとは、パッケージのインストール状況を確認する方法があります。

$ apt list php-mbstring
一覧表示... 完了
php-mbstring/groovy,groovy 2:7.4+76 all

パッケージ管理システムでは、該当パッケージの認識はされています。
しかし、まだインストール済みではありません。

インストール済みの場合、[インストール済み]と記載されます。

PHP mbstring拡張モジュールが有効化されていない

インストールしただけでは、mbstring関数は使えません。
PHP mbstring拡張モジュールを有効化して初めて、mbstring関数可能となります。

PHP mbstring拡張モジュールの状況は、以下の方法で確認できます。

  • 「php -m」でロードされているモジュール一覧を確認する
  • 「phpinfo()」で出力される情報から確認する

それぞれの方法で確認してみましょう。

「php -m」でロードされているモジュール一覧を確認する

モジュール一覧をgrepします。

$ php -m | grep 'mbstring'

PHP mbstring拡張モジュールが有効化されていれば、「mbstring」と表示されます。

「phpinfo()」で出力される情報から確認する

phpinfo()の結果を確認する方法です。
同様に、grepコマンドを使います。

$ php -r 'phpinfo();' | grep 'mbstring'
Multibyte decoding support using mbstring => disabled

デフォルトでは、利用不可となっています。

まとめ

mbstring拡張モジュールの状況を確認しました。
すでにインストール済みなら、あとはそれを有効化するだけです。

インストールがまだなら、まずはインストールから行います。
以下では、インストール・有効化の方法をそれぞれ説明します。

PHP mbstring拡張モジュール(php-mbstring)のインストール

インストールするパッケージを確認します。
パッケージ名は、「php-mbstring」となります。

$ sudo apt show php-mbstring
Package: php-mbstring
Version: 2:7.4+76
Priority: optional
Section: universe/php
Source: php-defaults (76)
Origin: Ubuntu
Maintainer: Ubuntu Developers <ubuntu-devel-discuss@lists.ubuntu.com>
Original-Maintainer: Debian PHP Maintainers <team+pkg-php@tracker.debian.org>
Bugs: https://bugs.launchpad.net/ubuntu/+filebug
Installed-Size: 13.3 kB
Depends: php-common, php7.4-mbstring
Download-Size: 2,012 B
APT-Sources: http://old-releases.ubuntu.com/ubuntu groovy/universe amd64 Packages
Description: MBSTRING module for PHP [default]
 This package provides a MBSTRING module for PHP.
 .
 PHP (PHP: Hypertext Preprocessor の再帰的頭字語) は広く使われている
 オープンソースな汎用スクリプト言語で、特にウェブ開発に適しており、 HTML に組み込むことができます。
 .
 This package is a dependency package, which depends on Debian's default
 PHP version (currently 7.4).

パッケージのバージョンは、PHPのバージョンによって変わってきます。
バージョンは指定しない方が適したバージョンがインストールされることになります。

よって、php-mbstringのインストールは、以下のコマンドで行います。

$ sudo apt-get install php-mbstring

インストールは、少し時間がかかります。
まずは、パッケージの状況から確認します。

$ apt list php-mbstring
一覧表示... 完了
php-mbstring/groovy,groovy,now 2:7.4+76 all [インストール済み]

[インストール済み]が、記載されるようになりました。
では、モノ(共有ライブラリ)を確認しておきます。

$ ls /usr/lib/php/20190902 | grep 'mbstring'
mbstring.so

PHP mbstring拡張モジュール(php-mbstring)のインストールは、これで完了です。

PHP mbstring拡張モジュールの有効化

有効化の際には、php.iniに以下の記述を追加します。

extension=mbstring.so

しかし、今回はその必要がありません。
「/etc/php/7.4/apache2/conf.d」の下に、「/etc/php/7.4/apache2/conf.d/20-mbstring.ini」が存在しています。

$ ls /etc/php/7.4/apache2/conf.d | grep 'mbstring'
20-mbstring.ini

そして、そのファイルの内容は以下。

20-mbstring.ini

$ cat /etc/php/7.4/apache2/conf.d/20-mbstring.ini
; configuration for php mbstring module
; priority=20
extension=mbstring.so

このファイルがあるため、php.iniへの追記が不要ということです。
ここまでの処理は、php-mbstringインストールの際に自動で行われます。

では、設定を反映するためにApacheの再起動を行います。

$ sudo systemctl restart apache2

再起動が完了したら、モジュールの状況を確認しましょう。
実は、コマンドラインPHPへの反映にはApacheの再起動が不要です。

でも、一般的にはApache上でPHPの利用がメインとなります。
そのため、確認はまとめてやります。

$ php -m | grep 'mbstring'
mbstring
$ php -r 'phpinfo();' | grep 'mbstring'
/etc/php/7.4/cli/conf.d/20-mbstring.ini,
Zend Multibyte Support => provided by mbstring
Multibyte decoding support using mbstring => enabled
・・・

ブラウザでも確認しておきましょう。
Apacheへの反映は、こちらでの確認が必須です。

iniファイルが認識されていることを確認。

そして、利用可能モジュールとして表示されています。

これで、PHP mbstring拡張モジュールの有効化まで終わりました。
次は、実際にmbstring関数が使えるかどうか確認します。

mbstring関数の動作確認

動作確認は、次のコードで行います。

<?php
    $str = "日本語";
    /* 内部文字エンコーディングからSJISに変換 */
    $str = mb_convert_encoding($str, "SJIS");
?>

上記コードを実行します。
エラーが何も出なければ、成功です。

ただ、表示が何もないと正常に機能しているかどうか不明です。
エラーこそ出なくなっていますけどね。
そこで次のコードも試してみましょう。

<?php
    $str = "日本語";
    // 現在のdetect_orderで文字エンコーディングを検出
    echo mb_detect_encoding($str);
?>

上記コードを実行した結果は、以下。

各環境によって、表示される内容は異なります。
これにて、mbstring関数の動作確認は完了です。

以上、mbstring関数の動作確認を説明しました。

タイトルとURLをコピーしました