[PHP] XAMPP の Apache にのみ NLS_LANG 環境変数を適用したい... | Archive Redo Blog

Archive Redo Blog

DBエンジニアのあれこれ備忘録

ローカルPC に XAMPP を利用して PHP + Oracle の開発環境を設定しました。

PHP による Web アプリケーション開発では、文字エンコードは UTF-8 で統一するのが望ましいと言われています。

そのため、php.ini で PHP の文字エンコードを UTF-8 に設定し、

[PHP]
default_charset = "UTF-8"

[mbstring]
mbstring.internal_encoding = UTF-8
mbstring.http_output = UTF-8

Oracle の文字エンコードも、システム環境変数 NLS_LANG を設定して UTF-8 にしました。

NLS_LANG=Japanese_Japan.AL32UTF8

これで、PHP + Oracle で日本語を扱っても文字化けすることはありません。


ただ、システム環境変数に NLS_LANG を指定してしまうと、SQL*Plus などの文字エンコードも UTF-8 になってしまいます。

Windows の場合、それはちょっと困ります。

それで、XAMPP の Apache にだけ NLS_LANG=Japanese_Japan.AL32UTF8 を適用したいと思ったのですが、設定できるところが見当たらないんですよね。

httpd.conf に

SetEnv NLS_LANG Japanese_Japan.AL32UTF8
と書いてみると、php_info() の Apache Environment には設定されるんですが、PHP から Oracle へのアクセスが正常に動作しません。

どうやら php_info()の environment に NLS_LANG が設定されていないとだめなようです。


ところが、さらにいろいろ試行錯誤していたら、XAMPP にコマンドラインインターフェースがあることを発見。

ならば、バッチファイルで対処できるではないかと、以下のような Apache の起動/停止用バッチファイルを作ってみると、

XamppApacheStart.bat
SET PATH=C:\app\oracle\product\11.1.0\db_1\instantclient_11_1;%PATH%
SET NLS_LANG=Japanese_Japan.AL32UTF8
C:\xampp\xampp-control.exe start apache

XamppApacheStop.bat
C:\xampp\xampp-control.exe stop apache

無事、XAMPP の Apache にだけ NLS_LANG を適用することができ、PHP から Oracle へのアクセスも正常に行えるようになりました。


もっとスマートなやり方があればいいんですが、これでお茶を濁しておきましょう。