我正在尝试使用perl脚本在浏览器中打印XML文件。当我尝试在浏览器中运行脚本时,我遇到以下错误。
Server error!
The server encountered an internal error and was unable to complete your request.
Error message:
Premature end of script headers: get_data.pl
If you think this is a server error, please contact the webmaster.
Error 500
localhost
01/15/10 14:29:28
Apache/2.2.14 (Win32) DAV/2 mod_ssl/2.2.14 OpenSSL/0.9.8l mod_autoindex_color PHP/5.3.1
这是我的脚本。我也使用语法检查器检查了语法。我的perl配置没问题,因为其他简单的perl脚本工作正常。我认为问题在于“使用CGI”;指导我..
#!/usr/local/bin/perl -w
use strict;
use CGI;
use CGI::Carp qw(fatalsToBrowser);
my $r = new CGI();
my $id = $r->param('id');
if(!defined($id))
{
print "Content-type: text/html\n\nMissing parameter: id\n";
exit 1;
}
if($id eq '7007')
{
print "Content-Type: text/xml\n\n";
open INPUT, "get_data.xml";
while(<INPUT>) {
print $_; }
close INPUT;
}
OMG !!我只是命名了文件,然后试了......工作!!!! 真正的问题是什么?
答案 0 :(得分:5)
500内部服务器错误的第一件事是检查Web服务器的错误日志中是否有实际的错误消息。它可能与Perl相关也可能不是 - 一个常见的情况是服务器未设置为从您要求的位置执行CGI程序。
编辑:我刚刚在这里尝试过,Perl工作正常。但是,如果指定了7007以外的ID,则会得到500结果,因为脚本完成并退出而不发送HTTP标头(或其他任何内容)。您始终需要发送HTTP标头,否则Web服务器将报告“脚本标头过早结束”,因为它在看到标头结束之前停止接收数据。
答案 1 :(得分:2)
您希望我的导游Troubleshooting Perl CGI。它将指导您完成应该遵循的步骤以找到问题。
答案 2 :(得分:0)
请检查机器上perl的安装位置。请在提示符上执行命令“which perl”以获取正确的位置。您可能在“/ usr / bin / perl”而不是“/ usr / local / bin / perl”上安装了perl。否则你的脚本似乎没问题。