2010-01-15 113 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

相關問題