【问题标题】:Perl & Apache HTTP server: Can't do Tie MLDBM when the cgi script is executed from the server, but okay when executed from the command line. Why?Perl & Apache HTTP 服务器:从服务器执行 cgi 脚本时无法执行 Tie MLDBM,但从命令行执行时可以。为什么?
【发布时间】:2011-03-04 20:49:04
【问题描述】:

请帮忙!这个问题我真的要疯了!

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

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

错误是权限被拒绝:

软件错误:

/var/www/cgi-bin/rich/pages/display 第 381 行的权限被拒绝。

如需帮助,请向网站管理员 (root@localhost) 发送邮件,提供此错误消息以及错误发生的时间和日期。

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

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

那么我还错过了什么? Apache 的 httpd.conf 中的哪些配置可能会出错?诚然,我以前没有任何使用 Apache HTTP 服务器的经验,所以这几乎是我第一次使用它。但是,我不止一次地阅读手册以寻找我可能出错的地方,但我没有注意到任何东西。但我当然可能是错的。

谢谢!!

【问题讨论】:

  • 添加 'die unless -e "$data_path/$db_name.db";'在此行之前

标签: perl apache cgi permission-denied


【解决方案1】:

您是否验证了$data_path$db_name 包含您认为他们所做的事情?

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

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

我从未在 apache 中遇到(或听说过)任何会阻止 CGI 进程获得打开文件的权限的东西,所以我高度怀疑这是 apache 配置问题。很可能是在寻找错误的文件,或者文件的权限对于 apache 运行 CGI 进程的用户不正确。

【讨论】:

  • $data_path 是绝对路径,$db_name.db 是普通的二进制文件。 $data_path/$db_name.db 的文件权限是''-rwxrwxrwx''。正如我所说,当从命令行''./display''执行脚本时,打开文件完全没有问题。我什至将运行 Apache 服务器的用户和组更改为文件的所有者,但仍然没有运气。
  • @user:可以打开文件简单阅读吗?即open my $fh, '<', "$data_path/$db_name.db" or die "failed to open $data_path/$db_name.db: $!";
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多