2010-06-17 200 views
0

请帮忙!我真的疯了这个问题!Perl和Apache HTTP服务器:当从服务器执行cgi脚本时,无法执行MLDBM绑定,但从命令行执行时无法执行。为什么?

我有一个CGI Perl脚本,它从Apache HTTP服务器在执行时,在下面的行总是失败:

tie %db, 'MLDBM', "$data_path/$db_name.db", O_RDONLY, 0640 or die $! 

和错误是权限被拒绝:

Software error:

Permission denied at /var/www/cgi-bin/rich/pages/display line 381.

For help, please send mail to the webmaster ([email protected]), giving this error message and the time and date of the error.

但是,当执行从命令行,它工作没有任何问题。

我已确保目录和要绑定的文件具有正确的权限。

那么我还错过了什么? Apache的httpd.conf中有哪些配置可能会出错?无可否认,我之前没有任何Apache HTTP服务器的经验,所以这是我第一次玩这个游戏。不过,我已经阅读过不止一次的手册来寻找我可能错误的事情,但我没有注意到任何事情。但我当然可能错了。

谢谢!

+1

添加'死亡,除非-e“$ data_path/$ db_name.db”;'在此行之前 – 2010-06-17 15:26:44

回答

0

您是否验证过$data_path$db_name包含您认为他们在做什么?

$data_path绝对路径,它不依赖于活动用户的身份或主目录?

ls -l $data_path/$db_name.db显示文件的所有权和权限是什么?

我从来没有在apache上跑过(或听说过)任何会阻止CGI进程获得打开文件权限的东西,所以我非常怀疑这是一个Apache配置问题。最有可能的是它要么寻找错误的文件,要么文件的权限对于Apache正在运行CGI进程的用户是不正确的。

+0

$ data_path是绝对路径,$ db_name.db是普通的二进制文件。 $ data_path/$ db_name.db的文件权限是''-rwxrwxrwx''。正如我所说的,当脚本从命令行''./display''执行时,打开文件没有任何问题。我甚至将运行Apache服务器的用户和组更改为文件的所有者,但仍然没有运气。 – His 2010-06-17 09:52:41

+0

@user:你可以打开文件进行简单的阅读吗?即'打开我的$ fh','','$ data_path/$ db_name.db'或者'打开$ data_path/$ db_name.db:$!'失败';' – Ether 2010-06-17 16:16:19