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。