RedHat ES4 PHPマルチバイト関連の設定あれこれ。 | A Day In The Boy's Life

A Day In The Boy's Life

とあるエンジニアのとある1日のつぶやき。

業者から納品されたプログラムを、こちらの環境で動作させようとしたら一部正常に動かない部分が・・・。


エラーの内容を表示させてみると


Call to undefined function: mb_convert_kana()


と出てます。

う~ん。どうもマルチバイト関連のモジュールが正しく機能(もしくはインストール)されていない模様。


phpinfo()関数でPHPの詳細情報を表示させてみると

Configureのオプションでは


--enable-mbstring=shared

--enable-mbstr-enc-trans

--enable-mbregex


というオプションがついています。(PHPはRPMからインストール)

が、phpinfo()の詳細画面であるはずの「mbstring」の項目がありません。

正常にマルチバイトがサポートされている状態であれば


[mbstring]


Multibyte Support enabled

・・・・


という項目が存在します。


php.iniファイルのマルチバイト関連の設定項目も編集済みなのですがコマンドラインから


# php -m


と入力してみても確かに、mbstringのモジュールが表示されません。

調べてみると、php-mbstringというパッケージを別途入れなければならない模様。


# up2date -u php-mbstring


で、パッケージをインストール。

Apacheのリスタートで動作するようになりました。


phpinfo()でも「mbstring」の項目が表示されます。


# php -m


で、mbstringのモジュールが出てくる事も確認。


あとは、環境に合わせてphp.iniファイルのmbstringの項目を適当に編集する必要があります。


[mbstring]
;mbstring.language = Japanese
;mbstring.internal_encoding = EUC-JP
;mbstring.http_input = auto
;mbstring.http_output = SJIS
;mbstring.encoding_translation = Off
;mbstring.detect_order = auto
;mbstring.substitute_character = none;


この辺り。

それぞれの項目の意味は、マニュアル 参照のこと。


PHPをRPMでインストールされた環境を触ったのが初めてだったので、少しはまりました。

マルチバイト関連のモジュールがインストールされていないのなら、phpinfo()のConfigureのオプションで「--enable-mbstring=shared」とか付けないで欲しいけど・・・。

ソースからコンパイルする時は、モジュールが無ければエラーで止まってくれるから解りやすいんですがね。