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