Perl脚本无法正常工作..(错误:脚本标头过早结束)

时间:2010-01-15 09:24:34

标签: perl cgi

我正在尝试使用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 !!我只是命名了文件,然后试了......工作!!!! 真正的问题是什么?

3 个答案:

答案 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。否则你的脚本似乎没问题。