windows : Apache + PHP + Oracleの環境で、システム環境変数に NLS_LANG=JAPANESE_JAPAN.JA16EUCを登録したくない。しかし、phpスクリプト内のsetenvでNLS_LANGを指定するとどうも挙動不審。サービスとして立ち上がるApacheにだけ、環境変数「NLS_LANG」を登録出来たら、どんなに幸せだろう。そんな欲求からこのモジュールは作られました。
mod_nls_lang.lzhをダウンロード、解凍してください。解凍されたファイル、mod_nls_lang.dllをApacheのインストールディレクトリの下のmodulesディレクトリへコピーしてください。
httpd.confに以下の行を追加してください。
LoadModule nls_lang_module modules/mod_nls_lang.dll
<IfModule mod_nls_lang.c>
SetNlsLang JAPANESE_JAPAN.JA16EUC
</IfModule>
「JAPANESE_JAPAN.JA16EUC」の部分は、自分の使いたい言語を指定してください。
UNIX版はバイナリを用意しておりません。
なぜなら、UNIX環境の需要はないだろうと思うからです。そのこころは、UNIXだとApacheデーモンががシェルスクリプトから起動するからこんなの使わなくても、Apache専用環境変数が登録出来る!
どうしても、使いたいという方は、mod_nls_lang_src.lzhよりソースコードをダウンロードし、自前でライブラリを作ってご利用下さい。環境によっては、_snprintf関数をsnprintfと書き換える必要があるやもしれません。
その後httpd.confファイルに以下の行を追加してください。
LoadModule nls_lang_module modules/mod_nls_lang.dll
<IfModule mod_nls_lang.c>
SetNlsLang JAPANESE_JAPAN.JA16EUC
</IfModule>
「JAPANESE_JAPAN.JA16EUC」の部分は、自分の使いたい言語を指定してください。
mod_nls_lang_src.lzhにソースコードも置いておきます。おかしな所、危険なコードを見つけた方はbyplayer@zoo.email.ne.jpまでメールをいただけると助かります。危険なコードをいつまでも使っていたくないので。
このソフトは各ユーザの自己責任のものにご利用下さい。
使用によって生じたいかなる損失も著者は責任を負いません。
このプログラムは使用はもちろん配布、改変版の配布も自由です。
Apacheへ環境変数「NLS_LANG」を登録する、たったそれだけの機能を持ったApacheモジュールです。
他に方法が見つからなかったため、このようなモジュールを作りましたが、これより良い解決策が見つかりました。
新規ユーザを作成し、ユーザの環境変数にNLS_LANGを登録する。
Apacheサービスを起動するユーザを今作ったユーザに変更する。
という物です。
せっかく作ったし、Apacheモジュール作成のサンプルとしての意義があるかもしれないのでこのまま公開しておきます。