2017-03-22 76 views
0

如果我需要添加一些東西來改善問題,請告訴我。使用HTML的Perl CGI ::模板

現在我是一個初學者perl和cgi web開發。我想使用HTML::Template模塊,但不知怎的,我無法設置它正常工作。這裏是一個非常簡單的代碼,代表我測試的:

use strict; 
use warnings; 
use CGI; 
use HTML::Template; 

my $test = new CGI; 
my $tmpl = HTML::Template->new(filename => 'TemplateSimple.html'); 


$tmpl->param(
     title => 'Test', 
     body => '<p>This is a test</p>', 
); 

my $out = $test->header(-type => 'text/html', 
         -charset => 'utf-8'); 


print $out; 
print $tmpl->output; 

調用的頁面,我總是與瀏覽器最終顯示服務器錯誤消息時:

502 - Web服務器接收到一個無效的同時充當 網關或代理服務器。

我認爲這是非常基本的東西,我似乎不明白,但強烈的互聯網研究導致沒有成功。

我TemplateSimple.html文件看起來像這樣:

<!DOCTYPE html> 
<html lang="de"> 
    <head> 
     <meta charset="utf-8"> 
     <title><TMPL_VAR NAME=title></title> 
     <link rel="SHORTCUT" ICON href="favicon.ico" /> 
    </head> 

    <body> 
     <TMPL_VAR NAME=body> 
    </body> 
</html> 

現在,事情是我必須使用CGI,因爲我要處理的網頁用戶輸入(我得到了一些這方面的工作實例,因此這裏不應該是問題),但是我想在模板中定義基本的html結構,我可以根據需要插入代碼段。

編輯:我認爲它可能有一些做與本地Perl之間的不同CONFIGS和Perl的CGI配置(從日食,這並運行正常運行)。有人知道這種情況嗎?

EDIT2:顯然在Eclipse中建立一個Perl CGI配置後,運行該腳本從本地主機的預期。但是,從外部源調用頁面時的問題仍然存在。就像DaveCross所說的那樣,這個錯誤在於web服務器配置,而不是Perl腳本。

有人可以幫我嗎?

+2

寫入Web服務器錯誤日誌的內容是什麼?如果您從命令行(使用'perl -c')編譯程序,您會看到什麼?是否安裝了HTML :: Template?這是2017年,爲什麼這麼多人仍在編寫CGI程序? :-( –

+0

呵呵,對不起,我工作的公司仍在使用它...我更喜歡更現代化的東西,我不知道服務器錯誤日誌在哪裏,但是當我在eclipse中運行perl腳本時,以下控制檯輸出:'Content-Type:text/html; charset = utf-8 HTML :: Template = HASH(0x5a2f74)'。當我使用print $ tmpl-> output'時,但在瀏覽器中我仍然收到錯誤消息。 –

+3

@DaveCross因爲沒有人正在編寫關於如何部署PSGI內容的正確的全功能指南。我聽說你有一個奇特的博客...想要一些TUIT? :) – simbabque

回答

1

顯然,錯誤來源比想象的簡單得多。當初始化該行的HTML ::模板(在Perl腳本)

my $tmpl = HTML::Template->new(filename => 'TemplateSimple.html'); 

我纔不得不改爲指定不僅是文件名的完整路徑,所以

my $tmpl = HTML::Template->new(filename => 'C:/inetpub/wwwroot/Project/TemplateSimple.html'); 

解決我的問題。

可以感興趣的是,webservice是以非常基本和標準的方式在IIS 7中設置的。