perl-cgi程序中的500内部服务器错误

时间:2012-12-28 04:02:00

标签: forms perl cgi internal-server-error cgi-bin

我收到错误“内部服务器错误。服务器遇到内部错误或配置错误,无法完成您的请求。”

我在html中提交表单并获取其值。

HTML代码(index.cgi)

#!c:/perl/bin/perl.exe
print "Content-type: text/html; charset=iso-8859-1\n\n";
print "<html>";
print "<body>";
print "<form name = 'login' method = 'get' action = '/cgi-bin/login.pl'> <input type = 'text' name = 'uid'><br /><input type = 'text' name = 'pass'><br /><input type = 'submit'>";
print "</body>";
print "</html>";

用于获取数据的Perl代码(login.pl)

#!c:/perl/bin/perl.exe
use CGI::Carp qw(fatalsToBrowser);
my(%frmfields);
getdata(\%frmfields);
sub getdata {
    my ($buffer) = "";
    if (($ENV{'REQUEST_METHOD'} eq 'GET')) {
        my (%hashref) = shift;
        $buffer = $ENV{'QUERY_STRING'};
        foreach  (split(/&/,$buffer)) {
            my ($key, $value) = split(/=/, $_);
            $key = decodeURL($key);
            $value= decodeURL($value);
            $hashref{$key} = $value;
        }
    }
    else{
        read(STDIN,$buffer,$ENV{'CONTENT_LENGTH'})
    }
}

sub decodeURL{
    $_=shift;
    tr/+/ /;
    s/%(..)/pack('c', hex($1))/eg;
    return($_);
}

HTML页面正确打开但是当我提交表单时,我收到内部服务器错误。

请帮忙。

4 个答案:

答案 0 :(得分:6)

Web服务器的错误日志是什么意思?

独立于它所说的内容,必须自行停止解析表单数据。有模块,特别是CGI.pm。使用它,您可以改为:

use CGI;

my $CGI = CGI->new();

my $uid  = $CGI->param( 'uid'  );
my $pass = $CGI->param( 'pass' );

# rest of your script

更干净,更安全。

答案 1 :(得分:3)

我同意Tore你不能自己解析这个问题。您的代码有多个错误。你不允许多个参数值,你不允许;备用分隔符,您不会在URL中使用查询字符串处理POST,依此类推。

我不知道免费在线多长时间,但chapter 15 of my new "Beginning Perl" book covers Web programming。这应该让你开始一些体面的基础知识。请注意,在线版本是早期的粗略草稿。实际的书还包括第19章,它有一个完整的Web应用程序示例。

答案 2 :(得分:1)

可能是这条线是问题吗?

my (%hashref) = shift;

您正在初始化正确的哈希值,但shift会为您提供哈希引用,因为您执行了getdata(\%frmfields);。你可能想要这个,而不是:

my $hashref = shift;

答案 3 :(得分:1)

“500内部服务器错误”只是意味着某些东西不像Web服务器所期望的那样工作。也许你没有启用CGI。也许脚本不可执行。也许它位于不允许Web服务器访问的目录中。甚至可能是Web服务器成功运行脚本并且完美地,但是没有使用有效的HTTP标头集启动其输出。您需要查看Web服务器的错误日志以找出它不喜欢的内容,这可能是也可能不是Perl问题。

就像其他人所说的那样,不要尝试解析查询字符串并尽可能地自我调整。{1}}。使用众多可用且已知可正常工作的精细模块或框架之一。 CGI.pm是他们所有人的祖父,并且适用于较小的项目,但我建议您查看适当的Web应用程序框架,例如DancerMojoliciousCatalyst (如果你计划用一些相对简单的页面和表格构建任何东西,那么还有很多其他的,但那些是三巨头)。

相关问题