2016-01-16 50 views
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; 
} 
+4

您应该始终在脚本的顶部使用strict和use warnings。他们会给你有用的错误信息。显示500是因为存在致命错误,但由于程序不首先发送内容类型标头,因此Web服务器将其视为_内部服务器错误_。 HTTP响应被破坏。出现问题时这很正常。在开发过程中,您可以使用https://metacpan.org/pod/CGI:Carp#REDIRECTING-ERROR-MESSAGES将消息传递给浏览器。也许你还没有安装Email :: Valid? – simbabque

+2

这听起来像你没有安装“Email :: Valid”模块。如果从命令行运行程序会发生什么?此外,您必须*总是*'使用strict'和'使用警告'all''在每个*您编写的Perl程序的顶部 – Borodin

+0

@Borodin严格运行脚本和警告会给我同样的错误。在标题之前输出脚本结束:contatti.cgi 关于模块的安装,是不是已经安装在xampp中?我的意思是,如果我在网络服务器中使用这样的模块会发生什么?没有其他语言的标准库吗?对不起,我的愚蠢,但我进入Perl几天,所以我不知道它是如何工作的 – Mastarius

回答

0

经过一番搜索,我发现Perl的服务器我是通过XAMPP运行没有成功安装的模块。我决定切换到运行顺利的草莓!所以问题是XAMPP和模块安装。

感谢您的建议和对所有人的帮助

相关问题