【Oracle】Oracle + PHP + Apache で 文字化けする。

Oracle + PHP + Apache で文字化けする。

文字化けなので、PHP文字コードかと思ったけど、違った。
Oracle + Apache の場合はApache側に以下の設定が必要になる。
ORACLE_HOME
ORACLE_SID
・NLS_LANG

この中の「NLS_LANG」を設定していなかった。
普通はOracleインストール時に設定するのかもしれないが、
今回はDBサーバとWebサーバが別に立っているので、
Webサーバ側の設定をしていなかった。

CentOSだと「/etc/sysconfig/httpd」に以下を追記すると文字化けしなくなりました。
export NLS_LANG=Japanese_Japan.AL32UTF8

Oracle文字コードによって「AL32UTF8」の部分は変えると思う。

ただし、cronによるコマンドライン実行だと文字化けする。
今回はバッチ処理なので、cronによる定期処理は必須。
なので、HTTPでアクセスするスクリプトをcronで起動する手法にした。
具体的には、Oracleからデータを取得する getDataByOracle.php
Access.php で叩く。
Access.php は file_get_contents() で叩くだけ。
あとは、Access.php を cron に登録しておけば、OK。