跳到內容

Perl 程式設計/CGI

來自華夏公益教科書
前一頁: DBI - Perl 資料庫介面 索引 下一頁: FastCGI

假設您已經擁有 Apache 伺服器(或讀取 shebang! 行的相容伺服器 - 我們將在稍後詳細說明),並且執行著 Perl 安裝程式,那麼在網際網路上執行 Perl 程式非常簡單。

首先,您必須有某種方式訪問該程式。在這裡我們將處理表單資料和提交,因此我們將假設您在 HTML 中的表單程式碼具有一個屬性,該屬性宣告ACTION="programname.cgi"

初始設定

[編輯 | 編輯原始碼]

CGI 指令碼的開始與任何其他 Perl 程式一樣,使用一個“shebang”,類似於

 #!/usr/bin/perl

(有關詳細資訊,請參見 Perl 程式設計/第一個程式)

接下來載入 CGI 模組

 use CGI;

CGI 模組使我們的工作變得容易,因為它包含針對網際網路使用的預程式設計函式。然後,我們必須建立一個 CGI 處理程式 - 允許我們訪問這些函式的東西。我們使用以下命令完成此操作

 my $query = CGI->new();

這意味著變數 $query 正在載入 CGI 標準函式。

現在,我們的程式已使用 CGI 模組設定,它應該看起來像這樣

 #!/usr/bin/perl

 use CGI;
 my $query = CGI->new();

因此,我們有一個程式,它只是還沒有做任何事情,實際上會導致伺服器錯誤,因為伺服器沒有輸出,也不知道要顯示哪種輸出,即使它有一些輸出。

檢索資訊

[編輯 | 編輯原始碼]

在我們告訴伺服器如何處理輸出之前,我們需要檢索我們的輸入。為此,我們使用$query我們之前宣告的變數。假設我們在表單中有一個名為“Name”的文字框,我們想了解在其中輸入了什麼。為此,我們在程式中新增以下程式碼行

 my $Name = $query->param('Name');

現在,這行程式碼為我們介紹了param()函式(用於“引數”)。該param()函式可以為我們執行很多方便的操作,它們都是很好的檢索變數的方法。它處理所有 HTTP 編碼,因此我們只得到一個乾淨的變數。另一個注意事項是,您不需要使用$Name作為您的變數。只記住同一個變數的一個名稱更方便。儘管如此,使用最適合您的方法。

現在,我們必須建立我們的標題資訊。CGI 甚至使這變得容易。無需記憶一堆 mime 型別宣告(您也可以這樣做),我們只需鍵入

 print $query->header();

它就會打印出我們的標題資訊。關於標題的說明。在括號內,我們可以指定引數,例如要傳送到使用者瀏覽器的 cookie。這在以後會變得非常有用。現在,我們只關注標題。

您需要放入的最後一件事(儘管程式會執行,顯示一個空白頁面,如果沒有它),是一些輸出。讓我們簡單地讓它向用戶顯示回他們的姓名。這看起來像這樣。

 print " You said your name was: $Name";

完成的程式碼

[編輯 | 編輯原始碼]

因此,我們現在有一個完整的程式,它處理表單,只使用六行程式碼。Perl 難道不棒嗎?最終程式碼看起來像這樣

 #!/usr/bin/perl

 use CGI;
 my $query = new CGI;

 my $Name = $query->param('Name');

 print $query->header();

 print "You said your name was: ", $query->escapeHTML($Name);

從更廣泛的角度來看,我們可以看到$query變數是與 CGI 模組非常重要的連線,因為它告訴 perl 您引用的函式屬於 CGI; 再次提醒您,您可以在$query的位置宣告任何變數名,只要您保持一致,儘管您會發現許多開發人員使用$query$q。還要注意使用escapeHTML方法以避免任何 HTML 注入 問題。

最後說明:確保更改/usr/bin/perl為您的 Perl 安裝路徑(假設它不是該路徑),這樣 Perl 才能正確執行。

有許多 CGI 框架可以幫助完成常見的 CGI 程式設計任務


前一頁: DBI - Perl 資料庫介面 索引 下一頁: FastCGI
華夏公益教科書