2010-01-15 95 views
-2

我想在浏览器中使用perl脚本打印XML文件。虽然我试图在浏览器中运行脚本,但遇到以下错误。Perl脚本不工作..(错误:脚本标题提前结束)

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 

这是我的script.I检查语法也使用语法检查器。我的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

将文件重命名为什么?我们没有ESP! – 2010-01-16 16:59:26

回答

5

500内部服务器错误首先要检查Web服务器的错误日志以获取实际的错误消息。它可能与Perl相关 - 一个常见的情况是服务器没有设置为从您要求的位置执行CGI程序。

编辑:我刚刚在这里试了一下,Perl工作正常。但是,如果指定了7007以外的ID,则得到500结果,因为脚本完成并退出,而不发送HTTP标头(或其他任何东西)。您需要需要发送HTTP标头,否则Web服务器将报告“脚本标头过早结束”,因为它在看到标头结束之前停止接收数据。

+0

我尝试了一个简单的Perl脚本来打印“你好”从上述脚本的相同位置。它工作正常。并且在网络服务器的日志中,它也是“脚本头过早结尾”。:-( – Babu 2010-01-15 10:02:20

+0

糟糕..它是我的坏运气.. :-( – Babu 2010-01-15 10:13:34

0

请检查您的机器上安装perl的位置。请在提示符处执行命令“perl”以获取正确的位置。您可能将perl安装在“/ usr/bin/perl”而不是“/ usr/local/bin/perl”上。否则你的脚本看起来很好。

+0

编号.Perl配置很好,它安装在“/ usr/local/bin/perl“only.I尝试了一些其他脚本从上述脚本的相同位置。他们工作正常。只有这一个让我麻烦。CGI声明的任何错误becoz? – Babu 2010-01-15 10:05:09

+0

它对我的工作很好http:// /cgi-bin/g.cgi?id=7007给了我XML,但如果我尝试使用http:// /cgi-bin/g.cgi?id=7它会给出错误,正如您所描述的。因为在这种情况下,页面“Content-Type”没有在任何流程中定义。 – 2010-01-15 10:28:53

相关问题