作者: wuu (I can make it!!) 看板: CK4-21
標題: 高等HTML寫作
時間: Tue Apr 13 19:57:18 1999
發信人: virgo@Palmarama (處女座男子), 信區: IM
標 題: CGI入門簡介
發信站: 台大計中椰林風情站 (Mon Apr 1 20:09:36 1996)
轉信站: Palmarama
***********************************************************************
版權聲明
本聲明為文件的一部份, 所有分離本聲明與內容之行為皆觸犯著作權.
本說明文件為一個半學期的計劃, 預訂每兩個星期發表一次, 對 CGI 與 HTML
Design
做一個入門性的簡介, 寫作對象是大一具有 Unix 系統與 HTML 有初步認識的學生
參考文件:
http://hoohoo.ncsa.uiuc.edu./docs/cgi/overview.html
http://agora.leeds.ac.uk/nik/Perl/start.html
http://www.ee.fju.edu.tw/tools_test.html
指導老師: 莊裕澤 計劃製作:李正鱗 技術指導: 陳甚旭 , 蔡明訓
本文件保有著作權, 所有引用或轉貼行為皆須徵得本人同意,
並不得從事商業性行為之販售或利用
***********************************************************************
高等HTML寫作
Part 1 CGI概說
1-1 簡介
在World Wide Web 全球資訊網中,只要你接觸的越多,你就越有機會聽到CGI
這個名詞。到底什麼是CGI呢?它能夠為HTML增加什麼樣的能力?希望你在
讀完這篇文章之後,能夠對CGI有更進一步的認識。
CGI (Common Gateway Interface)用學術一點的說法是:一個資訊服務者(伺服
器)其外部應用程式介面處理的標準。而其中的資訊服務者(information server)
可以是 Database、 Web Server或HTTP。用白話的說法是:CGI是一個使用者介
面與資訊提供者間資料溝通的橋樑。它負責將使用者輸入的資料傳遞給伺服
器或服務者;然後再把伺服器輸出的資訊傳送給使用者。
好了,對CGI有了初步的認識之後,接著我們要問:它能帶給我們什麼好處?
一個有CGI程式的HOME PAGE 與沒有CGI兩者之間最大的差異在於互動性。
一般簡易的HTML其內容是固定的,它並不會因為使用者的操作而對其內容
有所改變。但是如何對使用者的操作能夠做出回應,那便是CGI的工作了。它
能夠因應使用者的輸入而改變版面的文字或圖畫,使得原本靜態的版面能夠
有更多采多姿的變化。
1-2 特點
「嗯,CGI這玩意兒聽起來滿誘人的,但是我該如何使用或學習它呢?」這得
要分成兩個部份處理--介面與橋樑。 這裡所謂的介面,自然就是HTML;而所
謂的橋樑,就是指CGI的本身。這裡有一點我們必須要注意的事情是,不論H
TML或CGI他們都是一種語言,Hyper Text Markup Language(HTML) 顧名思義
其本身就是一個完整定義的語言,有其特殊的語法。而CGI只是概念性的名
詞,代表一組具有特定任務的程式,至於CGI本身是以何種語言實作,那便由
設計者來決定。
「我可以用哪些語言來撰寫CGI程式呢?」答案是「幾乎任何語言」。這裡所
謂的「幾乎」是指因系統而異。這話又怎麼說呢?正確的說法是:如果你的 W
eb Server 所存在的系統可以執行該語言,那麼你就可以使用該種語言來撰寫CG
I程式。也就說,如果你的Web Server 是架在 MS Windows上的話,那麼你就可
以用Visual Basics撰寫,如果你的系統是Unix,你就可以使用Unix Shell Script來
撰寫。以下幾種語言在市面上最常被使用到。
編譯式語言
C/C++
Fortran
直譯式語言
PERL
TCL
Any Unix Shell Script
Applescript
Visual Basic
「哇!這麼多種語言?我該選擇哪一種才好呢?」基本上,你可以選用你所
喜歡的任何一種語言;或者是你所會的。實際上,我建議你用 PERL。為什麼
要使用PERL?因為PERL是一種直譯式語言。換言之,它是一種在執行時才進
行編譯的語言。編譯式語言方便的地方在於容易偵錯、修改與維護。更重要
的是,編譯式語言只要有可執行碼就可以工作,但直譯式語言便不同了,你
必須要把程式原始碼留下來才能執行程式。這點對老闆而言很重要,只有可
執行碼代表的意義是你不能夠輕易的修改,維護程式,誰希望花了大把鈔票
卻拿不到程式的原始碼呢?這可不是一般的應用程式,而是為公司特別設計
的程式,所以編譯式語言是一個不錯的選擇。
但是編譯式語言難道就沒有缺點嗎?有的,就是速度太慢。要知道使用者在
輸入資料之後總希望很快的由系統得到回應。你總不希望再按下了「Enter」
之後過了十幾秒鐘畫面還沒有任何的反應吧!所以CGI程式設計師所必須要銘
記在心的要點是--別把程式寫的太慢。
1-3 PERL
好吧!就算編譯式程式很好,但是,為什麼要用PERL? 原因是:PERL對處理
字串很在行、與C等其他語言看起來很像,容易上手學習。最重要的是,因為
它是名牌--大家都在用它、談論它。將來你所看到的程式設計員所被要求的
技能之一可能就是「有獨立撰寫PERL的能力」。因此以下的課程介紹都將以U
nix為我們的作業系統平台,我們將以Unix-PERL做為我們的CGI寫作程式工具。
(有興趣瞭解 perl 真正的特點, 請參照最後面的說明)
1-4 "Hello CGI !"
第一個簡單的程式,就讓我們用PERL對CGI打個招呼吧!把以下的內容用文
書編輯器編輯好,並存成一個檔案,我們姑且就叫它test1.cgi
#!/usr/local/bin/perl
#
# 印出一個簡單的字串
#
print "Content-type: text/html\n\n"; # 宣告輸出內容形式
print " Hello CGI !"; # 印出 ' Hello CGI ! ' 的訊息
以下我們就逐行的來解釋第一個程式吧!
1-4-1 奇怪的第一行--知會作業系統
#! 這個東西是告訴 Unix 作業系統,接下來的檔案內容是透過誰來處理。以一
個待編譯的程式而言就是告訴系統以下程式的直譯器是誰,它放在系統的哪
一個路徑之中。所以只要你使用的是直譯式的Unix Script , 都必須要加上這一
個程式開頭提示字串。
接在 #! 之後的是編譯器所在的路徑。以本行為例,我們的編譯程式放在/usr/loc
al/bin/之下,而它的名字叫做perl。也就是告訴作業系統「請使用放在 /usr/local/b
in/ 目錄中的 perl 來處理以下的檔案內容。」
因此,我們可以舉一而反三,如果你喜歡用 cshell script 寫程式那麼你的第一
行就可能變成
#!/usr/local/bin/csh
「那我怎麼知道 perl 放在哪一個目錄下呢?」關於這個問題,就得請教系統
管理者才能得到答案。
「如果我是用 C/C++ 寫的,需不需要這一行啊!」當然不需要,因為程式本
身就具有可執行的能力,所以程式本身就可以處理自己所有的程序。對於編
譯式語言而言,完全不需要類似的第一行程式碼。
1-4-2 給程式設計與維護者觀看的二到四行--程式註解
# 這個字元代表註解,也就是說,不管這一個符號之後接的是什麼東西,直
譯程式都假裝沒看到,直到下一行為止。對程式的設計者而言,程式中的註
解佔舉足輕重的地位,想像一個千行以至於萬行的程式,如果沒有優良的註
解作為輔助,那麼將來對程式作偵錯或修改時必定困難重重。因此在程式適
當的地方加上註解是一個程式設計者必須加以注意的事情。
當然,以上都是 perl 這一個程式語言的作法,對於不同的程式而言,他們都
會有相對應的註解字元,我們就不在這兒多說了。
1-4-3 第五行的內容宣告--Content type
首先我們先把焦點放在 "......" 之中, Content-type: 將告訴外部的界面其內容的形
式, 以本例說明的話, 這一行就是告訴使用者界面: 我是文字或HTML格式的輸出.
至於接在後面的 \n是換行的意思. 在print"...." 的雙引號中, 並不會將 /n 印出來,
它會把 /n 當做一種特別得命令字元, 從事換行的工作. 為什麼要 \n\n 呢? 原因是
Content-type必須要與接下來的敘述空一行才可以正確運作.當然, 還有很多其它
的形式可以定義.我們留待以後再做說明.
1-4-4 第六行的印出字串功能--簡單的使用 print 這個函數
print 這個函數能把一些東西做輸出的動作,在這兒我們用 "......" 把我們想輸
出的一些字串放在其中,好了!待會程式執行到這一行時,就會印出我們放
在其中的東西。當然,print 這個函數可不是只有這麼一點點本事而已,它能
輸出的東西可多著呢!我們留著以後再詳細的討論。
1-5 執行第一個程式
將第一個程式輸入完畢之後,存成了test1.cgi。然後在Unxi命令列的提示符號
下輸入下列文字,已變將文字檔改成可以執行的檔案。
chmod 555 test1.cgi
這是告訴作業系統" 請把本檔案的屬性改成對任何人都有權利 讀 與執行的形式
". 當然, 還有其它的方法可以更改, 請翻閱手頭上的 Unix 手冊.
首先試試看這一個程式是不是可以正確無誤的執行。在提示符號下輸入
test1.cgi
看看會有什麼結果出現?如果和我們預期的相同,那麼恭禧你!如果不是,
只好再檢查一次你所輸入的內容是否正確。當然,你也要確定你的系統真的
有提供 perl 的直譯器才可以。如果一切都沒有問題,那麼 CGI 橋樑的部份就
完成了。接下來的問題就是--如何在HTML中使用test1.cgi這個程式。
1-6 介面處理
接下來我們要處理的部份是給使用者觀看的介面,請按照下面的範例輸入,
並存成 test.htm
<HTML>
<HEAD>
<TITLE>The CGI Test1 Program </TITLE>
</HEAD>
<BODY>
<H1>First Program</H1>
Say Hello to the World !
<A HREF="test1.cgi"> Please Press here !</A>
</BODY>
</HTML>
其中最重要的部份在於 <A HREF="test1.cgi"> Please Press here !</A> 這一行上
面。這一個敘述等於告訴界面: 如果有人按下了這一行字, 那麼請你執行同一
個目錄下名字叫做 test1.cgi 的程式. 如果一切無誤. 那麼你就可以看到輸出的
結果了.
如果你實在看不懂這幾行, 那麼我建議你該先看 A Beginner's Guide to HTML 你
可以在 http://www.ncsa.uiuc.edu/General/Internet/WWW/HTMLPrimer.html 處取得
該份文件.
接下來的步驟請與你的系統管理者聯絡, 可能各系統有所不同. 以臺大資管系
為例, 你接下來必須建立一個叫作 public_html 的目錄, 並將其權限開放為任何
人均可讀與執行的權限, 並將你的兩個程式放入其中.
mkdir public_html
chmod 555 public_html
mv test1.* public_html
然後開啟任何一種流覽器(Netscape or Mosaic), 選 File/Open Location 然後選擇你
的 test1.htm 路徑, 如 http://www.im.ntu.edu.tw/~b1705057/test1.htm 再按 Enter
你就可以試試看程式是否正確. (ps. /~b1705057 是我的帳號的根目錄, 你可能要輸入
http://www.im.ntu.edu.tw/~b47050xx/test1.htm).
休息一下, 我們再研究更好玩的 Form Design.
附錄:
摘錄並翻譯數段 Programming Perl 作者 Wall/Schwartz 的話來說明 PERL 的好處
1. perl可以做的事情其它的語言也可以做, 如 C or Shells. 但是用 C or Shells 來處
理的話常需要較繁雜的步驟, 因為 Shells 能做的事情 C 無法輕易的做到. 而 C
能做的事情又比 Shells 來的多. Perl 綜合了以上兩者大部份的優點.
2.對於那些只是喜歡 Perl 的人而言, PERL= Practical Extraction and Report
Language. 對於那些深深愛上 Perl 的人, PERL= Pathologically Eclectic Rubbish
Lister. 而對於那些認為某些事情只有唯一解決之道的極少數人而言, Perl
提供最精簡且最具獨創性的解決方法.
3.Perl 從 C 與 Shells 借用了許多的功能, 也能夠處理 awk 與 sed 所有的功能. 你
可以利用 Perl 寫出安全性較高的程式. 最後, 我們鼓勵你培養一個程式設計者
應具有的三項重要美德 : 懶惰(laziness), 沒有耐性(impatience) 與 狂妄自大 (
hubris).
--
比起沈默
語言有時候是更靈巧的表達方式
--
※ Origin: 羅德島 ◆ From: 140.114.217.18