[PHP] Apacheで特定のPHPアプリケーションにのみNLS_LANG環境変数を適用したい | Archive Redo Blog

Archive Redo Blog

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

PHP+Oracle のアプリケーションを構築する場合、例えば文字コードを UTF-8 で統一するならば、NLS_LANG 環境変数に"Japanese_Japan.AL32UTF8"を設定します。

このアプリケーションを Linux 上の Apache で稼動させる場合、通常は Apache のインストールディレクトリの下の bin ディレクトリにある envvas に

export NLS_LANG=Japanese_Japan.AL32UTF8

と書いておけば OK です。

ただし、このように設定してしまうと、Apache 上で NLS_LANG 環境変数に異なるキャラクタ・セットを設定していることを前提にしている別のアプリケーションが稼動している場合、それらのアプリケーションの動作に悪影響を及ぼす可能性があります。

このような場合、Apache 全体に対して環境変数を設定するのではなく、PHP のコードの中で putenv() を使って設定してやるとよいようです。

putenv() を使用して設定した環境変数は該当リクエスト内でのみ有効で、リクエスト終了時には元に戻されます。

NLS_LANG 環境変数が必要なのは Oracle に接続するときだけですので、以下のように Oracle に接続する直前などに入れるのがよいかと思います。
.
.
.
putenv("NLS_LANG=Japanese_Japan.AL32UTF8");
$con = oci_connect( $username, $password, $host, $port, $sid );
.
.
.