PHP:ocilogon実行時にORA-12154
24時間365日戦える営業マンを作りあげます。ホームページコンサルタントの山田直毅(なおたか)です。
開発環境を構築している時にちょこっとはまったのでメモ。
PHPとoracle10.2の環境を構築したので、PHPからコネクションがはれるか確認するスクリプトを書いてみた。
<?php $conn = ocilogon('scott','tiger','ORCL'); print_r($conn);
うまくいけば、接続リソースのIDが表示されるはずだが洗礼を浴びる(涙)
ocilogon(): _oci_open_server: Error while trying to retrieve text for error ORA-12154
まぁ、よくあることだからなぁと色々調べてみたら、apache起動時の環境変数設定が原因であることがわかった。
apache起動時に読み込まれる/etc/sysconfig/httpに
ORACLE_HOME=/u01/oracle/app/oracle/product/10.2.0/db_1 export ORACLE_HOME
と記述してapacheを再起動。これでいい結果が得られるはずだったんだが・・・、あれ、画面が真っ白になってエラーも出なくなってしまった。
※ORACLE_HOMEのパスはインストールの方法によって異なる。
ターミナルでログインして、apacheユーザで直接phpを起動してみると、次のお題が…。
Warning: ocilogon(): _oci_open_session: OCIHandleAlloc OCI_HTYPE_SVCCTX:
OCI_INVALID_HANDLE
試しにrootユーザでphpを実行してみたら正常に動作した。これはファイル/ディレクトリの権限が怪しいと睨んでいたら、apacheユーザを
oracleのインストールユーザであるoinstallにくっつけてしまえば良いという情報を発見。
/etc/groupを開いて
oinstall:x:200:apache
とapacheのグループをを後ろに追記したら、問題なく動作するようになった。
※apacheのグループはhttpd.confの設定によって異なる。
すらすら書いているように見えるけれど、3時間以上はハマった(涙)
- Apache2.2.3
- Oracle10.2.0
- PHP4.3.9