0
我注意到我越来越内部服务器错误500当我尝试使用电子邮件::有效在我的CGI脚本。我在这是一个新手,所以我无法理解这个问题可能是什么。我想写使用电子邮件::有效验证电子邮件地址一个简单的形式验证,但是当我试图把线使用电子邮件时发生Perl内部服务器错误::有效
use Email::Valid;
它给我的错误。这是我的完整代码:
#!C:\xampp\perl\bin\perl.exe
use Email::Valid;
use CGI;
my $query = new CGI;
print $query->header ();
my $nome = $query->param("Nome");
my $email_address = $query->param("Email");
my $website = $query->param("Website");
my $comments = $query->param("Messaggio");
$nome = filter ($nome);
unless(Email::Valid->address($email_address)) {
$email_address = "Invalid email address";
}
$website = filter ($website);
$comments = filter ($comments);
print "Nome: $nome<br>";
print "Email: $email_address<br>";
print "Sito: $website<br>";
print "$comments<br>";
print <<END_HTML;
<html>
<head></head>
<body>Thanks for filling in our form!</body>
</html>
END_HTML
sub filter
{
my $field = shift;
$field =~ s/From://gi;
$field =~ s/To://gi;
$field =~ s/BCC://gi;
$field =~ s/CC://gi;
$field =~ s/Subject://gi;
$field =~ s/Content-Type://gi;
$field =~ s/[\0\n\r\|\!\/\<\>\^\$\%\*\&]+/ /g;
return $field;
}
当不使用电子邮件::有效的代码,它工作正常!
#!C:\xampp\perl\bin\perl.exe
use CGI;
my $query = new CGI;
print $query->header ();
my $nome = $query->param("Nome");
my $email_address = $query->param("Email");
my $website = $query->param("Website");
my $comments = $query->param("Messaggio");
$nome = filter ($nome);
$email_address = filter ($email_address);
$website = filter ($website);
$comments = filter ($comments);
print "Nome: $nome<br>";
print "Email: $email_address<br>";
print "Sito: $website<br>";
print "$comments<br>";
print <<END_HTML;
<html>
<head></head>
<body>Thanks for filling in our form!</body>
</html>
END_HTML
sub filter
{
my $field = shift;
$field =~ s/From://gi;
$field =~ s/To://gi;
$field =~ s/BCC://gi;
$field =~ s/CC://gi;
$field =~ s/Subject://gi;
$field =~ s/Content-Type://gi;
$field =~ s/[\0\n\r\|\!\/\<\>\^\$\%\*\&]+/ /g;
return $field;
}
您应该始终在脚本的顶部使用strict和use warnings。他们会给你有用的错误信息。显示500是因为存在致命错误,但由于程序不首先发送内容类型标头,因此Web服务器将其视为_内部服务器错误_。 HTTP响应被破坏。出现问题时这很正常。在开发过程中,您可以使用https://metacpan.org/pod/CGI:Carp#REDIRECTING-ERROR-MESSAGES将消息传递给浏览器。也许你还没有安装Email :: Valid? – simbabque
这听起来像你没有安装“Email :: Valid”模块。如果从命令行运行程序会发生什么?此外,您必须*总是*'使用strict'和'使用警告'all''在每个*您编写的Perl程序的顶部 – Borodin
@Borodin严格运行脚本和警告会给我同样的错误。在标题之前输出脚本结束:contatti.cgi 关于模块的安装,是不是已经安装在xampp中?我的意思是,如果我在网络服务器中使用这样的模块会发生什么?没有其他语言的标准库吗?对不起,我的愚蠢,但我进入Perl几天,所以我不知道它是如何工作的 – Mastarius