CGI にすると require できない?(コマンドだとできる)

[上に] [前に] [次に]
SRI 2000/06/04(日) 00:21:48
gifcat.pl を使おうと思い、コマンドラインで実行するとうまくいくのですが、
CGI に組み込むとうまくいきません。

gifcat.pl を gifcat.cgi という名前でスクリプトと同じ場所に入れ、
chmod 711 し、
require '絶対パス/gifcat.cgi';
にして実行します。

ブラウザーから見ると Internal Server Error になり、
エラーログをみると

Can't locate プログラムの絶対パス/gifcat.cgi in @INC (@INC contains: /usr/local/
lib/perl5/i386-freebsd/5.00404 /usr/local/lib/perl5 /usr/local/lib/perl5/site_pe
rl/i386-freebsd /usr/local/lib/perl5/site_perl .) at プログラム名 line 9.

と怒られていますが、コマンドラインから実行するとうまくいきます。

スクリプトの最後に gifcat.pl をいれ込むとうまく動きます。
@INC に入っているパスに入れないといけないんでしょうか?

でもエラーログのメッセージの最後に「.」と書いてあるので、
スクリプトと同じパスであればいいのかと思い、
requre 'gifcat.cgi';
と相対パスで書いてもダメです。
しつこいようですが、この場合もコマンドラインで実行すると
うまくいきます。

なぜコマンドラインと CGI で require の挙動が違うんでしょう?
apache の設定でしょうか?

ぼくは管理者ではありませんので、
好きなモジュールを require できる方法をどなたか教えてくださいー。

PTAN [E-Mail] 2000/06/04(日) 01:46:05
CGIの実行ユーザが別のユーザになっているのでは?
別のユーザだと、chmod 711ではread権が無いので、上記のような
エラー出ることになります。
という訳で、chmod 744にしてみて下さい。

dindi 2000/06/04(日) 02:12:26
[[解決]]
できましたー。
そっかー、require は読み込むので read 権がいるんですね。
どうもありがとうございます!!!
CGI の実行ユーザーは nobody のようです。だれだそいつ。

2000/06/04(日) 02:26:25
dindiさんって誰ですか?(ピュア)

2000/06/04(日) 02:46:09
> CGI の実行ユーザーは nobody のようです。だれだそいつ。
OSがfreeBSDのようなので、たぶん AH-64 戦闘ヘリでしょう。
http://www.apache.org/

if (dindi == SRI改) {
  print "まずいんでねーの?\n";
} else {
  print "なんだこりゃ?\n";
}

SRI/dindi 2000/06/04(日) 04:44:24
しつれー
気分でハンドルを変えていることがバレてしまいました。(^^;
今後ともよろしく。

SRI 2000/06/04(日) 04:45:19
そうそう、httpd は apache です。

[上に] [前に] [次に]