中文資訊科技應用 | 首頁 | 前頁 | 交流 | 搜尋 | 地圖

中文教學 > 中文資訊科技應用 > CGI

CGI (Common Gateway Interface)


cgi 是甚麼?

html(網頁語言)技術讓經由網絡而來的資訊在瀏覽器上靜態地展示予瀏覽者,javascript 程式則讓瀏覽器根據瀏覽者的行為作出動態的反應,把靜態的網頁變得互動起來;cgi 一方面能展示資訊,也能反應瀏覽者的行為,但更重要的分別在於:cgi 程式在伺服器上 (server-side) 運行,而不像 html 或 javascript 般在瀏覽者的電腦中 (即所謂「用戶端 client-side」) 處理,這一分別,讓 cgi 程式不受瀏覽者電腦的不同規格所限制,而能具有較 html 或 javascript 更大的威力和效用。舊日 javascript 還未誕生的時候,要在網頁上出現任何動態效果,當時唯有用 cgi 了。

cgi 是「Common Gateway Interface」的簡稱,cgi 程式必須在網頁伺服器上運行,它一方面通過網頁伺服器收集瀏覽者在瀏覽器上輸入的資料,然後傳送給伺服器上的其他程式作分析或處理,並按需要把處理後的結果再經由網頁伺服器送返瀏覽器,以反饋予瀏覽者。

上圖可見,cgi 是網頁伺服器(用以發放網頁予瀏覽器)和其他伺服器/伺服器上其他程式(用以作其他資料處理工作)之間的中介,因此命名為「Interface」。

JavaScript / Jscript
CGI
運行
瀏覽者的電腦之中 (client-side)。 伺服器上 (server-side)。
語言
JavaScript 最早由 Netscape 公司開發及命名,現在由 Mozilla 公司繼續發展;微軟公司自行開發類似 JavaScript 的 client-side 程式語言,並命名為 Jscript。不過,不論是 Javascript Jscript 均是國際標準組織 ECMA 於 1999 年發布的 ECMA 262 language specification (ECMAScript Edition 3) 標準的產品。

很多編程語言均可以用以編寫 cgi 應用程式,如 Unix Shell、C、PERL、PHP 等。PERL 是現今最常用的一種,但是,已有愈來愈多運用 PHP 編寫的 cgi 應用程式。

微軟公司近年開發了一種功能與 cgi 類似的技術,也須在伺服器上處理資料,稱為「ASP (Active Server Page)」,有些人把 ASP 也視作 cgi 的一種,然而,二者技術其實完全不同,不應混為一談。

系統
絕大多數常用瀏覽器,如 NetScape/Foxfire、Internet Explorer 或 Opera。

大部份 UNIX 作業系統的伺服器都允許用家免費運行以 PERL 編寫的 CGI 應用程式;至於 PHP,則常只開放給高階用家(例如 hkusua 可讓學系運行 PHP 程式,教職員或學生個人網頁則只能運行 PERL 程式)、或以額外選購形式收費使用。

微軟公司的 ASP 則主要在 WINDOWS 作業系統的伺服器上運行。

難度
把握好 JavaScript / Jscript 編程語言便可處理大多數的有關程式。 除把握有關編程語言(如 PERL、PHP 等)外,還須了解網絡尤其伺服器的基本運作方式
功能
JavaScript / Jscript 本身已是一種很大威力的程式語言,但受限於其 client-side 特點,因此所有功能均只能在瀏覽者的電腦中處理。 基本上,JavaScript / Jscript 能做的,CGI 都能做到,而且沒有 client-side 的限制。
權限
由於 JavaScript / Jscript 本身己很具威力,又能瀏覽者電腦內發揮其功能,因此,為保安起見,瀏覽器都設置了停用 JavaScript / Jscript 的選項供瀏覽者有需要時選擇。 正由於 cgi 比 javascript 有更大的威力(例如把伺服器上的檔案全部刪除),因此有些伺服器限制甚至不准許使用者安裝 cgi 程式。

有甚麼是 cgi 可以做而 html 和 javascript 不能的呢?想像一下網上成績查詢系統。一個在WWW環境下的學生成績公佈欄必將成為日後各類成績發佈的主要手段,每位學生交將有自己的密碼,所以不必擔心成績上網之後的保密性。任何學生以任何形式上網進入本站點的成績查詢系統之後,只要輸入自己的系列、班別、學號及密碼,便可以利用這個學生績查詢系統查詢自己的成績,該設計思路與系統不僅適合各類高校內部的成績發佈,也適合於全國高考、統考等大規模考試的成績發佈。本文介紹的只是一個功能單一的查詢系統,若需完善還需加入成績維護部分,由成績管理者進行內容維護,包括成績輸入、修改、刪除等功能。


應用 cgi 須具備的知識

cgi 是高階的網頁技術,因此,應用 cgi,除了必須對編寫網頁、尤其 html 語言十分熟悉之外,還要求以下幾方面的認識:

  1. ftp
  2. telnet
  3. 基本 unix 指令,如 chmod

安裝 CGI 的三、三、三步驟

安裝 cgi,包括「下載、設定、試用」等三大步驟;其中設定部份,包括:「伺服器設定、程式設定、網頁及啟動設定」等三部份;其中的伺服器設定﹐又再分為「目錄、上載及更改名稱、權限」等三環節。合共七個小步驟:

1. 搜尋並下載 cgi 程式及相關資料:

決定需要在網頁上加入怎樣的互動效果,然後選擇關鍵詞,到搜尋器上尋找。

2. 伺服器設定之一:設定相關目錄

在伺服器的 cgi-bin 目錄中以 MkDir 上新增儲存程式及其他有需要的目錄。

3. 程式設定

調校、設定程式中的有關參數。不同的程式,有不同的效果,同時,也有不同的要求。應用某一特定 cgi 程式 ,便須按照程式的規定(有關網頁多會說明清楚),設定網頁上的內容。有關 cgi 程式的調校項目包括:

a) 如程式以 PERL 編寫,程式的第一句說明哪裡找到運行 PERL 程式的資源,須因應伺服器修改;b) 程式涉及的網址;c) 程式顯示的內容。以下示例是一個十分簡單的 cgi 程式:

#!/usr/local/bin/perl

print "Content-type: text/plain", "\n\n";
print "Yes! Your web site is ready for running CGI programs";

exit (0);

4. 網頁與啟動設定

編寫新網頁,或改寫舊有網頁。很多時候,cgi 程式的供應者同時提供所需網頁,與程式一併下載。當然,有關網頁一般須稍作修改、調校。

把啟動 cgi 程式的起動部份加到網頁原始檔中的 body 之內,至於放在 body 之中的哪兒,則由網頁計設者自行從頁面設計上考慮。啟動部份一般有兩種形式:一、按鈕,如 ;二、連結,如 連結;如以鈕方式啟動,則有關按鈕必須置於表單 (form) 之內,這種方式通常用以收集瀏覽者輸入的的資料。下面是兩種啟動形式的示例:

<body>

......

啟動部份一般有兩種形式:一、按鈕,如下例:

<form name="form1" method="post" action="http://web.hku.hk/cgi-bin/cgiwrap/jwilam/ex31.cgi">

<input type="submit" name="Submit" value="按鈕">

</form>

或者,二、連結,如下例:

<a href="http://web.hku.hk/cgi-bin/cgiwrap/jwilam/ex31.cgi">測試</a>

......

</body>

以上套紅部份,便是所要啟動程式的網址。如果網頁供應者已提供所需網頁,網頁中應也加入了啟動的方法,但由於所要啟動程式的網址乃由用家自行設定,網頁供應者不能預先估計,這部份便須由用家調校了(見下步驟四)。

5. 伺服器設定之二:上載程式及相關檔案:這部份的作用有點像 javascript 的程式部份,不同者在於,javascript 是把程式放置在網頁原始檔之內,而 cgi 則須上載到伺服器之上,而且一般規定必須放在名為 cgi-bin 的目錄之中。

6. 伺服器設定之三:更改有關屬性:這是最複雜也最重要的部份--上載到伺服器上的程式及其他相關檔案,必須經 chmod 指令修改屬性,方能運行。

7. 試用:試用看看有沒有錯誤,如有出錯,則重新檢視以上各步驟以除錯,然後把網頁以及有關附帶檔案都上載到伺服器上。

以上執行後輸出應該這樣:

Yes! Your web site is ready for running CGI program

以上六個步驟,實際次序還要視具體情況和實際程式而有變化,有時候,還得反覆重試。


在 hkusus 伺服器上的 CGI 程式的網址

放在 hkusus 伺服器上的 cgi 程式,網址不能按一般的文件夾方式表示路徑,而必須以 cgiwrap 方式表達,否則無法運行。例如,一個於安裝在 cgi-bin/wiki 文件夾內的 wiki.pl 程式,網址為不是「http://web.hku.hk/~<login-name>/cgi-bin/wiki/wiki.pl」,而是「http://web.hku.hk/cgi-bin/cgiwrap/<login-name>/wiki/wiki.pl」:

錯誤

http://www.hku.hk/jwilam/cgi-bin/wiki/wiki.pl

錯誤

http://web.hku.hk/~jwilam/cgi-bin/wiki/wiki.pl

正確 http://web.hku.hk/cgi-bin/cgiwrap/jwilam/wiki/wiki.pl

第一次在 hkusus 伺服器上安裝以 PERL 編寫的 CGI 程式

步驟 1:

步驟 2:

步驟 3:

步驟 4:啟動

http://web.hku.hk/cgi-bin/cgiwrap/jwilam/ex31.cgi

步驟 5:

步驟 6:測試

http://web.hku.hk/cgi-bin/cgiwrap/jwilam/ex31.cgi


CGI 應用一:討論區

WWWBoard


CGI 應用二:維基網

Wiki


CGI 應用三:Counter

CGI Program - webpage counter
http://www.hku.hk/local/cc/training/imap_cgi_frame/ex-counter.html

Counting the Access Frequency of your Web Page
http://www.hku.hk/cc_news/ccnews71/counter.htm


CGI 應用四:網站搜尋

Search Engine


CGI 應用五:數據庫

Database


香港大學 CGI 連結

cgi 程式必須安裝到伺服器上,因此,安裝必須按照伺服器設定,換言之,不同伺服器,安裝方法會不完全相同。如果要在香港大學 hkusua 伺服器上安裝 cgi 程式,便必須清楚了解香港大學 hkusua 伺服器的特性和要求。

User Handbooks for Computer Center, HKU
http://www.hku.hk/cc/home/documentations/handbook.htm

FAQ on Web page Authoring
http://www.hku.hk/cc/faq/www/q1-5.htm

Setting up CGI Programs in Your Personal Web Page
http://www.hku.hk/cc_news/ccnews69/cgibin.htm

Introduction to CGI
http://www.hku.hk/local/cc/training/imap_cgi_frame/cgi.html

The Common Gateway Interface (CGI)
http://www.hku.hk/local/cc/course/cgi/cgi.html

Counter

Welcome to the YaBB User/Visitor Help and Administration/Installation Guide
http://www.hku.hk/ctvaa/board/YaBBHelp/index.html


網上 CGI 教學

A basic guide to running CGI scripts by EZscripting.co.uk
http://www.ezscripting.co.uk/cgibasicguide/


網上 CGI 程式

The CGI Resource Index (
http://www.cgi-resources.com/Programs_and_Scripts/Perl/

Matt's Script Archive
http://www.worldwidemart.com/scripts/

nms
http://nms-cgi.sourceforge.net/