我正在尝试创建一个Perl脚本,当他们访问某个网站时会获取远程主机的IP地址。但是我似乎无法解决这个apache错误:
Permission denied at path_to_perl_script line 19
我在Ubuntu服务器上运行一个网站,我已经正确配置了Apache2和CGI。
以下是login.pl
脚本:
#!/usr/bin/perl -T
use CGI;
use DBI;
use strict;
use warnings;
use Path::Class;
use autodie;
# read the CGI params
my $cgi = CGI->new;
my $username = $cgi->param("username");
my $password = $cgi->param("password");
my $port = $cgi->remote_host();
my $dir = dir("var/www/html");
my $file = dir->file("testingPerl.txt");
my $file_handle = $file->openw();
$file_handle->print($port);
我是Perl的新手,我不太明白为什么会收到此错误。
答案 0 :(得分:2)
由于此声明,您收到“权限被拒绝”错误:
my $dir = dir("var/www/html");
路径var/www/html
相对于脚本的当前工作目录而言,它不太可能存在。你可能想要的是/var/www/html
。
但是,您的脚本使用运行Web服务器的用户标识的权限运行。在正常配置中,通常不允许该用户写入/var/www/html
。因此,修复可能无法解决您的问题。
此外,请注意,如果您使用Path::Class或Path::Tiny,则不需要或不需要autodie:它们都会出错。
您可以尝试使用这个简单的脚本来查看一切是否正常:
#!/path/to/perl -T
use strict;
use warnings;
use CGI;
my $cgi = CGI->new;
print $cgi->header('text/plain'), $cgi->remote_host, "\n";
最后,看起来你要覆盖每个访问者的输出文件。