こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

解決済みの質問

CGI でDBI->connectするとエラー発生

お世話になります。

CGIでORACLEに接続しようとしたところ、Internal Server Errorが発生し
困っております。

環境:
ORACLE:10.2.0
DBI:1.48
DBD:DBD-Oracle1.16
PERL:5.8.0
APACHE:2.2.0
OS:RED HAT LINUX ES 3.0

プログラム上落ちる場所:
DBI->connectのところ

エラーの発生する傾向:
APACHEでCGIを実行した時だけ
コマンドライン上で実行するとエラーは発生しない
また、CGIでもDBI->connectを外すとエラーは起きない

APACHEのエラーログ:
install_driver(Oracle) failed: Can't load
'/usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-
multi/auto/DBD/Oracle/Oracle.so' for module DBD::
Oracle: libnnz10.so: cannot open shared object file: No such file or
directory at /usr/lib/perl5/5.8.0/i386-linux-thread-
multi/DynaLoader.pm line 229

今までに試した事:
・環境変数の定義確認(LD_LIBRARY_PATH等、cgiに記述)
・環境変数の取得確認(cgi実行時に画面に表示)
・/etc/ld.so.confに$ORACLE_HOME/libを追記&ldconfig実行
・httpd.confに環境変数のセットを記述(SetEnv)
・libclntsh.so.10.0が$ORACLE_HOME/lib以下にある事を確認
・DBDをSTATICオプションをつけてインストール
・/usr/libや/libにOracle.soをコピー
・環境変数LD_RUN_PATH(Oracle.soのパス)を追加

一体どこが悪くて動かないのか、途方にくれております。
原因として何が考えられるか、その場合どう対処すれば良いか、
ご教示いただければ幸いです。
他にも必要な情報や、試すべき事がありましたら遠慮なくどうぞ。
よろしくお願い致します。

投稿日時 - 2006-06-30 13:22:05

QNo.2246973

すぐに回答ほしいです

質問者が選んだベストアンサー

>APACHEでCGIを実行した時だけ
>コマンドライン上で実行するとエラーは発生しない
この症状だと、apache (httpd) にアクセス権がない、という可能性あり。

usr/lib/perl5/site_perl/5.8.0/i386-linux-thread-multi/auto/ 以下のディレクトリ、ファイルの permission を調べて見ては。

あと、コマンドラインで which perl した結果が、CGI で呼んでいる perl と同じものかどうかも、一応チェックするのが吉です。

投稿日時 - 2006-06-30 22:32:10

お礼

ご回答、有難うございます。
以下の対応をする事により、解決しました。

・apacheのエラーメッセージにあるファイルのパーミッションをゆるめる(今回はlibnnz10.soだった)
・環境変数でアクセスするディレクトリのパーミッションをゆるくする
・apacheでcgiを実行する時のユーザー(nobody)のセカンドグループにoinstall($ORACLE_HOMEを持つグループ)を追加する
・httpd.confの最下行に必要な環境変数を全てセットし、apacheを再起動する

以上、解決しましたので終了とさせて頂きます。

投稿日時 - 2006-07-03 11:51:00

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(1)

あなたにオススメの質問