中文版 Perl CGI 程式寫作常問問題集(一) - 中國WEB開發者網絡 (http://www.webasp.net) -- 技術教程 (http://www.webasp.net/article/) --- 中文版 Perl CGI 程式寫作常問問題集(一) (http://www.webasp.net/article/8/7711.htm) |
| -- 作者:未知 -- 發佈日期: 2003-09-13 |
| 版本: 1.0 原文作者: Shishir Gundavaram <shishir@ora.com> Tom Christiansen <tchrist@perl.com> 中譯、補充: 蕭百齡 <hsiao@uconnvm.uconn.edu> 版權事宜:(複製、轉載者務必遵守) This document, and all its parts, are Copyright (c) 1996, Shishir Gundavaram and Tom Christiansen. All rights reservered. Permisson to distribute this collection, in part or full, via electronic means (emailed, posted or archived) or printed copy are granted providing that no charges are involved, reasonable attempt is made to use the most current version, and all credits and copyright notices are retained. Requests for other distribution rights, including incorporation in commercial products, such as books, magazine articles, or CD-ROMs should be made to either of the authors. 本文件著作權屬於 Shishir Gundavaram 及 Tom Christiansen 所 有,Copyright (C) 1996。在不涉及收費營利、盡可能地使用最新 版,及所有著作權告示保持完整的情況下,作者允許任何人透過電 子形式(電子郵件、討論群佈告,或存放),或印表方式對本文件 作完整或部份發行。如欲將本文件作其他方式發行,包括將本文件 附加於商業產品,諸如書籍、雜誌文章,或光碟等之中,必須事先對 二位作者其中一人提出請求,以徵得許可授權。 本中譯版及譯者補充部份著作權屬蕭百齡及兩隻老虎工作室所有, Copyright (C) 1997。本中譯版遵守並使用與上述原文版相同的使用 條款發行。 --------------------------------------------------------------------------- 文體說明: 1. 譯者已就原文中語焉不詳、資訊過時,或可作額外補充之處附加註解。這些註解 均以星號 (*) 於適當處(通常為句尾)標示。實際的說明文字則大多緊鄰星號 所在的段落,自成一段。所有註解文字均以「【譯者】」起頭。 2. 範例中的 Perl 程式碼已由譯者適度加以翻譯、去除多餘的括弧,並依 perlstyle manpages 中所建議的寫作格式及習慣稍作修整。 --------------------------------------------------------------------------- 目錄: 1.0 -入門簡介 Q1.1: 為什麼我的 HTML page/form 需要用 script? Q1.2: CGI 各代表什麼? Q1.3: 到底什麼叫 script?我能拿它來能做什麼? Q1.4: 什麼是 Perl?為什麼有那麼多人用它來做 CGI? Q1.5: 有沒有教 CGI 或 Perl 的書或是線上資料? Q1.6: 是不是有這方面的郵遞論壇 (mailing lists) 或新聞討論群組? Q1.7: 網路上是不是有專門收藏郵遞論壇或新聞討論群組的 posts 的站? 2.0 - Modules (模組) Q2.1: 我是不是該用 Perl CGI modules 來寫 CGI scripts ?自己做不是比較容 易嗎? Q2.2: 如何知道某個 module 該怎麼個用法? Q2.3: 有哪些 Perl4 的 CGI 或 WWW的 libraries ? Q2.4: 有哪些給 Perl5 使用的 CGI modules?我該用哪個?為什麼? Q2.5: 為什麼這麼多 perl CGI libraries 都是 object-oriented (物件導向) 的?我對用物件導向來寫程式一竅不通。難道就沒有簡單一點,給不會物 件導向的人使用的 libraries 嗎?物件導向有多難? 3.0 - CGI 與 WWW Server Q3.1: 我的 Perl CGI 程式要放在哪裡執行?cgi-bin 這個目錄是做甚麼用的? Q3.2: 什麼是檔案使用權限?怎樣改? Q3.3: Perl 應該安裝在哪裡才可以執行它? Q3.4: 我為什麼一直得到 ``Server: Error 500'' 的訊息? Q3.5: 我試著打開一個檔案,想把資料儲存在裡頭,但是 open() 的指令失敗 了。到底是怎麼搞的? 4.0 -程式設計疑難雜症 Q4.1: 我想讓 user 填的 form 資料自動寄給我,該怎麼做?有沒有範例? Q4.2: 剛才這個用 form 送信的 script 看起來有點難。為什麼不乾脆用 ``mailto:URL'',這樣 user 填入的資料就可以寄給我了? Q4.3: 我要如何在 UNIX 以外的平台上做 Perl-CGI,譬如 Mac、MS-DOS、 Windows 及 NT?我的 Perl CGI 程式能不能在這些平台之間互相移植呢? 能不能很直接,沒有麻煩?我在 UNIX 主機上有帳號,但是都是先在 Windows/Mac 上做。我要如何在我自己的機器上測試寫好的 CGI scripts ? Q4.4: 在 Perl CGI 程式中,STDERR (標準錯誤訊息)、STDIN (標準輸入),和 STDOUT (標準輸出)各是連到何處? Q4.5: 如何寫計數器? Q4.6: 要如何用一個 Perl 的取代指令將所有 HTML 標籤從一份文件中刪除? Q4.7: 要如何知道是誰/哪台機器/哪個瀏覽器執行了我的程式? Q4.8: 人家看得到我的 Perl CGI 程式嗎?如果是這樣的話,那不就讓他們知道 我的程式是怎麼運作的了。這是個安全漏洞嗎?我要怎麼把它隱藏起來? Q4.9: 我需要將整個 Perl library 都複製到我的 htdocs 目錄底下嗎? Q4.10: 我為什麼不該叫使用者輸入他們的密碼或身份證字號或信用卡號碼?有一 個 TYPE="password" 不是就是拿來做這個的嗎? Q4.11: 我要如何產生專門替 Netscape 設計的網頁,以別於世上其他的瀏覽器? Q4.12: 為什麼我的 system() 所產生的資料輸出順序不對? Q4.13: 我聽說 Netscape 會支援 Java。這是不是說我現在得棄 Perl,改Java 了?是不是該這麼做? Q4.14: 我要如何讀取環境變數?為什麼它們有時候會不一樣? Q4.15: 為什麼我輸出的資料被攪亂了(如 ``b < a'' 會被破壞掉)? Q4.16: 為什麼我的Perl CGI 程式可以由指令列,卻無法從瀏覽器去執行? Q4.17: 為什麼我的 Perl CGI 程式能跑,但是不會把資料寫到檔案中? Q4.18: 要如何做一個會維繫狀態,或允許【同一使用者】多次連線的 form? Q4.19: 如果不從瀏覽器去執行我的 CGI 程式,要如何替它除錯? Q4.20: 如果不靠<FORM>標籤,要如何叫出 Perl CGI 程式? Q4.21: 要如何避免旁人不先填欄位就執行我的 form?他們為什麼一直不斷這麼 做? Q4.22: 那些 server 回應碼 (server response codes) 是幹什麼用的?有什麼意 義? Q4.23: 為什麼 print "Location: http://host/page.html\n 不 work?又為什 麼它只 work 一次,但隨後的轉向就都弄錯了呢? Q4.24: 要如何讓 server 在每個 HTML 網頁的底部都自動加上一個:「最近更新 日期: ...」的告示?或者,是不是只有 SSI 的網頁才能這麼做?CGI 程 式的日期要如何取得? Q4.25: 什麼樣的場合下以 Perl 寫 CGI 程式會顯得太小題大作,因為用 shell 就可以做到?而什麼樣的場合對 Perl 來說又過於困難?用 C++ 做這類的 事不是好得多嗎?那用 C 呢? 5.0 -安全 Q5.1: 以 Perl 寫成的 CGI 程式是不是不如以 shell 或 C 寫的來得安全? Q5.2: 我該特別留意哪些安全事項? Q5.3: 為什麼大家都說 http://bigidiot.abuse-me.com/perl.exe?foo.pl 這樣 很危險?會有多糟? Q5.4: 要如何在程式中安全地使用逆向撇號(backticks,"`")?這麼做: @ans = `grep'$user_field' some.file`; 是不是真的不安全? Q5.5: /$user_variable/ 這個句法是不是 Perl 5 中的一個安全漏洞? --------------------------------------------------------------------------- 1.0 -入門簡介 --------------------------------------------------------------------------- Q1.1: 為什麼我的 HTML page/form 需要用 script? 因為有的時候您需要在 HTML 文件中使用動態資料(非固定不變的資料)。這包括了 日期和時間這類的簡單資料,或是一個顯示「您是第 xxx 位訪客」的計數器。但它 也可能包括根據使用者輸入而得出的大餅圖/條統圖、資料庫搜尋產生的結果,或動 畫等這類的東西。要做出像這樣的東西,您唯一的方法是使用 CGI scripts (儘管您 也可以應用客戶端程式,如 Java 和 JavaScript 來達到這個目的,不過那又是完全 不同的一回事!)。 --------------------------------------------------------------------------- Q1.2: CGI 各代表什麼? 以下是我的編輯* Andy Oram (<http://jasper.ora.com/andyo> 和 Linda Mui (<http://pcnt1.ora.com> (他們很棒!)所寫的一段非常好的描述: 【譯者】這是原文的第一作者 Shishir G. 指他所寫的 CGI Programming on the World Wide Web (<http://www.ora.com/info/cgi/> 一書的編 輯。 Common 向您確保 CGI 可以使用多種程式語言並和多種 不同的系統互動。它讓您自由選擇達到目的的方 法,不把您綁死在單獨一種作法之下*。 Gateway 提示您 CGI 的力量不在於它本身所做的事,而 在於它提供了連結其他系統的潛力,例如資料庫 和圖形製造器。 Interface 只是表示 CGI 對如何善用其特性提供了明確的 界定-換句話說,您可以設計程式來適當利用這 個介面。 【譯者】似乎有影射 Java 之意。 --------------------------------------------------------------------------- Q1.3: 到底什麼叫 script?我能拿它來能做什麼? 簡單的說,script 就是程式!好吧、好吧,應該說二者有語意上的差別。如果您真 的想知道,那麼去買一本電腦程式設計的書來看(或許該說 script 設計 :-) )。 您可以藉著寫 CGI 程式/script 變很多魔術。您可以即時製作圖形、連結資料庫傳 回【查詢】結果,還可以連到 Internet 上其他的 servers 去。 --------------------------------------------------------------------------- Q1.4: 什麼是 Perl?為什麼有那麼多人用它來做 CGI? 答案就在 perl manpage 中的前三行敘述: Perl 是一解譯式的語言,專為高效率檢視文字檔案、從中抽取資料,據 以印製報表而設計。 絕大多數 CGI 應用程式的任務都涉及對資料作某種程度的處理,及連結外在程式。 Perl 恰好提供了好用的工具,讓人輕鬆愉快地達成這些任務。 --------------------------------------------------------------------------- Q1.5: 有沒有教 CGI 或 Perl 的書或是線上資料? * NCSA 的 CGI 文件 (<http://hoohoo.ncsa.uiuc.edu/cgi> * Forms 入門指引 (<http://robot0.ge.uiuc.edu/~carlosp/cs317/ft.4-5.html> * 許多 CGI 資源結點 (<http://www.cs.oberlin.edu/students/thirdstream/paxtond/cgi_stuff.html> * 原始的 CGI FAQ (<http://www.best.com/~hedlund/cgi-faq> * Perl FAQ (<http://mox.perl.com/perl/faq/index.html> * 由 Lincoln Stein 所著,一份很完整的WWW 及 CGI 操作安全 FAQ (<http://www-genome.wi.mit.edu/WWW/faqs/www-security-faq.html> * Paul Phillips 所著,CGI 安全 FAQ (<http://www.cerf.net/~paulp/cgi-security/safe-cgi.txt> * WWW FAQ (<http://boutell.com/faq/> 【譯者】此份 FAQ 的中譯版可在 http://www.acer.net/document/cwwwfaq/ (<http://www.acer.net/document/cwwwfaq/> 處取得。 以下是由 Cye H. Waldman (<http://wwwiz.com/books/cgi-perl.html> 所整理的 CGI 和 Perl 書籍一覽表*: 【譯者】此表由譯者更新,同時加入了原文作者 Tom C. 的 Perl 書評 (<http://www.perl.com/perl/critiques/>以供讀者參考。請注意:CGI 各書的等級評定乃單就其 Perl 部份的水準及正確性而言。符號說明: (Tom C. 用駱駝而非星星) 五顆星(**** *) ==> 很棒的書 (terrific books) 四顆星(*** *) ==> 不錯的書 (fine books) 三顆星(***) ==> 像樣的書 (decent books) 兩顆星(**) ==> 馬馬虎虎、勉強過得去的書 (so-so books) 一顆星(*) ==> 差勁的書 (poor books) 零顆星(0*) ==> 大爛書 (terrible books) NA ==> 不適用、無書評 (Not Applicable/Available) v4 ==> 內容較老舊,僅含蓋 Perl4 ----------------------------------------------------------------------------- +---------------------------------------------------------------------------+ 作者 書名 評價 出版者 所附 售價 軟體 (美金) +---------------------------------------------------------------------------+ Effective Perl Programming: 60 Methods Joseph Hall and Rules for Scripting NA Addison-Wesley □ $30 Better Programs (預定出版日期:1997年1 月) +---------------------------------------------------------------------------+ Perl Developer's Toolkit Jon Orwant (預定出版日期:1997年1 NA Advice Press □ $?? 月) +---------------------------------------------------------------------------+ Cgi Programming For ?? Dummies NA IDG Books □ $25 (預定出版日期:1997年1 月) +---------------------------------------------------------------------------+ Mastering Regular Expressions: Powerful Jeffrey Friedl Techniques for Perl and NA O'Reilly □ $30 Other Tools (預定出版日期:1997年1 月) +---------------------------------------------------------------------------+ CGI Developer's Resource J.M. Ivler (預定出版日期:1997年3 NA Prentice Hall 光 $45 月)碟 +---------------------------------------------------------------------------+ Perl 5 Windows NT Various Programming authors (預定出版日期:1997年1 NA New Riders □ $45 月) +---------------------------------------------------------------------------+ Teach Yourself CGI Eric Herrmann Programming with Perl 5 NA Sams.net 光 $40 in a Week, 2nd Ed. 碟 +---------------------------------------------------------------------------+ CGI: Internet Mark Felton Programming C++ & C NA Prentice Hall □ $?? (預定出版日期:1997年3 月) +---------------------------------------------------------------------------+ CGI Bible Ed Tittle (預定出版日期:1996年11 NA IDG Books □ $?? 月) +---------------------------------------------------------------------------+ Craig Patchett The CGI Cookbook: Perl & and JavaScript NA Wiley 光 $40 Matt Wright (預定出版日期:1996年11 碟 月) +---------------------------------------------------------------------------+ Drag-n-Drop CGI Baron Weil (預定出版日期:1997年1 NA Addison-Wesley □ $?? 月) +---------------------------------------------------------------------------+ Stephen Lines How To Program CGI with NA Ziff-Davis 光 $40 Perl 5.0 碟 +---------------------------------------------------------------------------+ CGI Programming for Bob Denny et Windows 磁 al. (預定出版日期:1997年3 NA O'Reilly 片 $30 月) |
| webasp.net |