精華區beta cksh76th21 關於我們 聯絡資訊
作者: 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