【PHP】モジュール版とCGI版の注意点【CORESERVER】

XREA/CORESERVERでは、PHPをApacheのモジュールとして動かすか、CGIとして動かすかの選択ができます。
http://www.coreserver.jp/help/index.php/phpcgi/

よく知られていることに、モジュール版では、セーフモードがOnであり、CGI版では、セーフモードがOffになるというものがあります。

しかし、これ以外にも、PHPの挙動が異なることがあるので注意が必要です。

その一つが、内部文字エンコーディングの設定です。

通常のモジュール版(PHP Version 5.2.5)では、
mbstring.internal_encoding の設定は、UTF-8 となっています。

これに対し、CGI版(PHP Version 5.3.27)では、
mbstring.internal_encoding の設定は、no value となっています。

CGI版のno value というのは、サーバーのデフォルト値が使われるのであり、結果として、EUC-JP が使われていると思われます。ちなみに、ファイルマネージャーのテキストエリアの初期設定は、EUC-JPです。

このことは、モジュール版からCGI版に切り替えた時に、不具合となって現れる可能性があります。

たとえば、文字数をmb_strlenでカウントする場合、引数にエンコードを指定していなければ、モジュール版のUTF-8とCGI版のEUC-JPとでは、異なった結果を返します。

このように、mb_・・・ 系の関数の使用で問題になるわけです。

この対策としては、CGI版で動かすファイルの先頭に次のように設定してやると上手くいきます。

mb_internal_encoding('UTF-8');

なお、文字エンコーディングが、サイト全体(アプリ全体)で、統一されていなければ、文字化けの現象をおこす危険もあります。この観点からも、モジュール版とCGI版の間での移行は慎重に行った方がよいと思います。

以上です。

カテゴリー: PHP, XREA/CORESERVER パーマリンク

コメントを残す

メールアドレスが公開されることはありません。