Perl&Apache HTTPサーバー:CGIスクリプトがサーバーから実行されたときにMLDBMをtieできませんが、コマンドラインから実行された場合は問題ありません。なんで?
-
28-09-2019 - |
質問
助けてください!私は本当にこの問題に夢中になっています!
CGI Perlスクリプトがあり、Apache HTTPサーバーから実行された場合、次の行で常に失敗します。
tie %db, 'MLDBM', "$data_path/$db_name.db", O_RDONLY, 0640 or die $!
そして、エラーは許可を拒否されます:
ソフトウェアエラー:
/var/www/cgi-bin/rich/pages/display line 381で拒否された許可。
ヘルプについては、このエラーメッセージとエラーの日時を提供して、Webmaster(root@localhost)にメールを送信してください。
しかし、コマンドラインから実行されると、問題なく動作します。
ディレクトリとタイのファイルに正しい権限があることを確認しました。
それで、私は他に何を逃しましたか? Apacheのhttpd.confのどのような構成が間違っている可能性がありますか?確かに、私はApache HTTPサーバーの以前の経験がなかったので、それを使って遊んでいるのはこれがほとんど私の初めてです。しかし、私は間違っている可能性のあるものを探すためにマニュアルを複数回読みましたが、何も気づきませんでした。しかし、私はもちろん間違っている可能性があります。
ありがとう!!
解決
あなたはそれを確認しましたか $data_path
と $db_name
あなたが彼らがしていると思うことを含んでいますか?
は $data_path
アクティブなユーザーの身元やホームディレクトリに依存していない絶対的なパス?
何をしますか ls -l $data_path/$db_name.db
ファイルの所有権と許可を表示しますか?
CGIプロセスがファイルを開くことを許可することを妨げるApacheで何もぶつかった(または聞いたことがない)ことはないので、それがApacheの構成の問題であることを非常に疑っています。おそらく、ApacheがCGIプロセスを実行していることをユーザーにとって、間違ったファイルを探しているか、ファイルのアクセス許可が間違っている可能性があります。