亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

CGI腳本入門學(xué)習(xí)

2019-11-17 05:51:06
字體:
供稿:網(wǎng)友
    • CGI腳本是什么?
      • CGI腳本是怎樣工作的?
      • 一個簡單的例子
    • 我能用CGI腳本嗎?
      • 你的服務(wù)器配置答應(yīng)CGI腳本嗎?
      • 你能編程嗎?
      • 你應(yīng)該用什么編程語言?
      • 你的服務(wù)器設(shè)置正確嗎?
      • 假如你的服務(wù)器不是UNIX系統(tǒng)呢?
    • 解剖CGI腳本
      • 輸出頭部
      • 輸出數(shù)據(jù)部
      • 帶闡述的腳本
      • 傳遞其他信息給腳本
    • 創(chuàng)建非凡的腳本輸出
      • 以裝載另一個文本響應(yīng)
      • 無響應(yīng)
    • 處理表單的腳本
      • 表單格式和表單腳本
      • GET 和 POST
      • URL 編碼
    • 問題
    • CGI 變量
    • 解碼程序
      • uncgi
      • cgi-lib.pl
      • 解碼文件上傳的輸入
      • 自己做
    • 非解剖的頭部腳本
    • 總結(jié)


學(xué)習(xí)CGI腳本(腳本)

CGI 意思為 Common Gateway Interface, 一種基于瀏覽器的輸入、在Web服務(wù)器上運行的程序方法. CGI腳本 使你的瀏覽器與用戶能交互,為了在數(shù)據(jù)庫中尋找一個名詞, 提供你寫入的評論,或者從一個表單中選擇幾個條目并且能得到一個明確的回答. 假如你曾經(jīng)碰到過在web上填表或進行搜索, 你就是用的CGI腳本. 你那時也許沒有意識到,因為大部分工作是在服務(wù)器上運行的,你看到的只是結(jié)果. 作為一個網(wǎng)頁設(shè)計者, 你創(chuàng)建客戶端的 CGI腳本, 服務(wù)器端的程序用來處理用戶輸入, 結(jié)果返回給用戶. 在這里你將學(xué)習(xí)關(guān)于CGI腳本的一切:
  • CGI腳本是什么?它是怎樣工作的
  • 一個CGI腳本輸出象什么?
  • 怎樣用參數(shù)或無參數(shù)創(chuàng)建一個CGI腳本
  • 怎樣創(chuàng)建一個返回規(guī)定響應(yīng)的CGI腳本
  • 怎樣創(chuàng)建一個輸入表單的CGI腳本
  • 有關(guān)在使用CGI腳本中的問題
  • 你能在腳本中使用的CGI變量

本章節(jié)假設(shè)在UNIX系統(tǒng)下的。

CGI腳本是什么?

CGI腳本簡單地講是個運行在Web服務(wù)器上的程序, 有瀏覽器的輸入觸發(fā). 這個腳本通常象服務(wù)器和系統(tǒng)中其他程序如數(shù)據(jù)庫的橋梁。 CGI 腳本難道不是一個真正的腳本?按照你的服務(wù)器的支持, 他們可能是一個編譯好的程序或者批命令文件或者其他可執(zhí)行的東西. 為了簡單起見,我們統(tǒng)稱他們?yōu)槟_本scripts.

CGI 腳本是任何運行在web服務(wù)器上的程序. CGI意思是Common Gateway Interface。  
CGI腳本是用下列兩種方法使用的: 作為一個表單的ACTION 或 作為一個頁中的直接link。

CGI腳本是怎樣工作的?

CGI腳本有服務(wù)器調(diào)用, 基于瀏覽器的數(shù)據(jù)輸入. 圖1 顯示在瀏覽器、服務(wù)器和腳本之間是怎樣的一個流程. 圖1. 從瀏覽器到服務(wù)器到腳本到程序 記住再回來噢! 這有個簡短的示意解釋:
  1. 一個URL指向一個CGI腳本. 一個CGI腳本的URL能如普通的URL一樣在任何地方出現(xiàn)。
  2. 服務(wù)器接收請求, 按照那個URL指向的腳本文件(注重文件的位置和擴展名),執(zhí)行腳本.
  3. 腳本執(zhí)行基于輸入數(shù)據(jù)的操作,包括查詢數(shù)據(jù)庫、計算數(shù)值或調(diào)用系統(tǒng)中其他程序.
  4. 腳本產(chǎn)生某種Web服務(wù)器能理解的輸出結(jié)果.
  5. 服務(wù)器接收來自腳本的輸出并且把它傳回瀏覽器,讓用戶了解結(jié)果。
 

一個簡單的例子

這里具體一步一步地解釋所有有關(guān)發(fā)生的細節(jié)。
在圖2中有個例圖:
圖2. 帶有一個腳本連接的頁. Display Date處是個指向CGI腳本的連接. 它的Html是這樣的: <A >Display the Date</A>說明是個CGI腳本是因為這里面有個cgi-bin的路徑. 在許多服務(wù)器cgi-bin是僅能夠放置CGI腳本的目錄. 當(dāng)你選擇這個連接時, 你的瀏覽器將向www.popchina.com服務(wù)器提出請求. 服務(wù)器接收這個請求計算出URL處的腳本文件名然后執(zhí)行這個腳本. 這個getdate腳本, 在UNIX系統(tǒng)中執(zhí)行是這樣的: #!/bin/shecho Content-type: text/plainecho/bin/date第一行是個非凡的命令,告訴UNIX系統(tǒng)這是個shell腳本; 真實的情況是從這行開始的下一行,這個腳本做兩件事:它輸出行Content-type: text/plain, 接著開始一個空行;第二, 它調(diào)用UNIX系統(tǒng)時間date程序, 這樣輸出日期和時間. 腳本執(zhí)行后輸出應(yīng)該這樣: Content-type: text/plainTue Oct 25 16:15:57 EDT 1994這個Content-type是什么東東?它是個非凡的編碼,Web服務(wù)器用來告訴瀏覽器輸出這個文本是什么類型的. 這與HTML中Content-type含義是一樣的。 這樣瀏覽器的輸出就如圖3. 圖3 date腳本輸出結(jié)果. 這是最基本的,實際情況要復(fù)雜得多,總之可以用來理解瀏覽器、服務(wù)器和腳本之間是怎樣工作的。

我能用CGI腳本嗎?

在你使用CGI腳本之前,有兩件事你也許要解決:CGI腳本 是個高級的Web特性并且需要你和Web  服務(wù)器治理者一樣好的知識。 肯定嗎?就是做不到,學(xué)學(xué)也可以?好吧!讓我們繼續(xù).

你的服務(wù)器配置答應(yīng)CGI腳本嗎?

為了能寫和運行CGI腳本, 你需要一個Web服務(wù)器. 不象通常的HTML文件, 你不能在本地系統(tǒng)上寫或試驗?zāi)愕腃GI腳本; 你得通過Web服務(wù)器來做這個. 但是即使你有一個Web服務(wù)器, 這個服務(wù)器必須非凡地為運行CGI腳本配置一下. 那意味著你所有的腳本必須放置在一個叫做cgi-bin的目錄下. 在編寫CGI腳本之前, 詢問你的服務(wù)器治理者是否答應(yīng)你安裝和運行CGI腳本, 并且假如可以的話,他們必須放置在哪兒?還有,你必須有個真正的Web服務(wù)器,假如是FTP或Gopher服務(wù)器,那你就不能用CGI. 假如你在自己的服務(wù)器上運行, 你必須非凡地創(chuàng)造一個叫cgi-bin的目錄,并配置你的服務(wù)器認可這個目錄為一個腳本目錄. 也必須記住下面有關(guān)CGI腳本特點:
  • 每個腳本是個程序, 它運行在瀏覽器可以請求的系統(tǒng)上, 執(zhí)行時使用CPU時間和內(nèi)存. 假如有成打上千的這些腳本同時運行,會怎樣?你的系統(tǒng)將不忍負載直至崩潰。
  • 假如你不仔細地編寫你的CGI腳本, 你將有可能讓別人通過你的CGI腳本參數(shù)進入傷害你的系統(tǒng).

你會編程嗎?

初學(xué)者注重! 一般地, 你必須具備一些基本編程概念與方法。你必須有類似系統(tǒng)工作的經(jīng)驗。假如你沒有這些背景, 你必須去學(xué)習(xí),好了,費話不多說.

你必須用什么編程語言?

你可以用你熟悉的任何語言編寫CGI腳本, 只要你的腳本遵守下一節(jié)所陳列的規(guī)則即可,只要那個語言能在你的Web服務(wù)器系統(tǒng)上運行. 在這本學(xué)習(xí)手冊中,僅用兩種語言編寫CGI腳本: UNIX shell和 Perl語言. 這個shell是適合在任何相近的UNIX系統(tǒng)上運行并且輕易學(xué)習(xí), 但是處理復(fù)雜的情況就困難了. Perl, 就要用這個語言了, 它是免費的, 這個語言是穩(wěn)定和強大的,類似C,但它也是較難學(xué)習(xí)的.

你的服務(wù)器設(shè)置正確了嗎?

為了運行任何一個CGI腳本, 不管簡單或復(fù)雜的,你的服務(wù)器必須設(shè)置成能夠運行他們,必須放置在一個特定的目錄,必須有一個依靠你服務(wù)器設(shè)定的文件擴展名. 假如你是租用服務(wù)器,就要是否答應(yīng)運行CGI腳本. 假如你擁有自己的服務(wù)器,檢查你的服務(wù)器說明書是怎樣處理CGI腳本的.

假如你用的不是UNIX?

只好再找別的學(xué)習(xí)手冊了。

解剖一個CGI腳本

假如你編寫它很久,克服很多警告和配置,恭喜你,你已經(jīng)會些CGI腳本,并且可以在你的網(wǎng)頁上使用了. 在這一章,將學(xué)習(xí)腳本是怎樣執(zhí)行,你的服務(wù)器又是怎樣與他們對話產(chǎn)生回應(yīng)的。

輸出頭部

雖然你的CGI腳本可以讓你做任何事情,但是腳本的輸出還是必須有一個規(guī)定形式.

這個 "腳本輸出" 意思是指你的腳本發(fā)回服務(wù)器的數(shù)據(jù). 在UNIX系統(tǒng)中, 輸出是發(fā)向標準輸出, 服務(wù)器從那兒檢測它. 在其他系統(tǒng)和服務(wù)器, 你的腳本輸出也許不一樣了.

這個頭部是實際不是文本的一部分,是服務(wù)器與瀏覽器之間的信息協(xié)議,你實際看不到。 有三個類型的頭部: Content-type, Location, 和Status. Content-type 最普遍的。 有關(guān)content-type解釋可以見有關(guān)HTML的說明, 一個你可以發(fā)出的特定編碼象這樣: Content-type: text/html在這個例子中,輸出數(shù)據(jù)的類型是text/html; 換句話說, 他是個HTML文件.
    表1. 通用格式和content-types.
 
FormatContent-Type
HTMLtext/html
Texttext/plain
GIFimage/gif
JPEGimage/jpeg
PostScriptapplication/postscript
MPEGvideo/mpeg
注重content-type 后面必須跟一個空行. 假如你沒有空行,服務(wù)器將無法搞清這個頭部在哪里結(jié)束。

輸出數(shù)據(jù)

你輸出的數(shù)據(jù)應(yīng)該符合你所規(guī)定的content-type; 假如content-type是text/html, 輸出安置應(yīng)該是在HTML. 假如content-type是image/gif, 輸出應(yīng)該是在一個二進制的GIF文件.
練習(xí)1: 小試試.
T這是個簡單的輸出日期的簡單腳本,這個CGI腳本還檢查看看我是否已經(jīng)登陸到我的Web服務(wù)器,并且報告發(fā)現(xiàn)了什么(如在圖4). 圖4. 腳本的結(jié)果
這是個很簡單的例子, 他能這樣備調(diào)用: <A >Is Laura Logged in?</A>這是沒有輸入的腳本,它只運行并且返回數(shù)據(jù). 根據(jù)前面的闡述,這個腳本內(nèi)容是這樣::
#!/bin/sh
  echo Content-type: text/html
  echo "<HTML><HEAD>"
  echo "<TITLE>Is Laura There?</TITLE>"
  echo "</HEAD><BODY>"
為了測試我是否已經(jīng)登陸系統(tǒng),用who命令(我的登陸名假設(shè)為lemay), 儲存結(jié)果在變量ison中. 假如我登陸, 變量ison將有些內(nèi)容,否則則是空的. ison='who | grep lemay'試驗結(jié)果及返回相應(yīng)提示的腳本是這樣: if [ ! -z "$ison" ]; then        echo "<P>Laura is logged in."</P>else        echo "<P>Laura isn't logged in."</P>fi最后關(guān)閉HTML: echo "</BODY></HTML>"現(xiàn)在你通過從命令行運行他,測試一下,你將得到一個結(jié)果說我未登陸你的系統(tǒng),當(dāng)然不可能的,他的輸出是這樣的: Content-type: text/html<HTML><HEAD><TITLE>Are You There?</TITLE></HEAD><BODY><P>Laura is not logged in.</BODY></HTML>這是輸出的一個HTML文本,這樣你的瀏覽器能正常顯示他,因為他是個HTML文件。
 
現(xiàn)在將他copy到你的服務(wù)器的cgi-bin目錄下,去執(zhí)行,假如你不能達到CGI-bin目錄,你必須詢問你的服務(wù)器治理者,你不能理所當(dāng)然地自己建立個CGI-bin目錄,那沒用的。

這個例子完整的腳本如下: #!/bin/shecho "Content-type: text/html"echoecho "<HTML><HEAD>"echo "<TITLE>Is Laura There?</TITLE>"echo "</HEAD><BODY>"ison='who | grep lemay'if [ ! -z "$ison" ]; then        echo "<P>Laura is logged in"else        echo "<P>Laura isn't logged in"fiecho "</BODY></HTML>"

帶有參數(shù)的腳本

為了傳遞一個參數(shù)給腳本,可以在URL中使用 (?) 插入腳本名詞和參數(shù)之間, 用加號(+) 表示每個單一的參數(shù), 如: <A HREF="/cgi-bin/myscript?arg1+arg2+arg3">run my script</A>當(dāng)服務(wù)器接收到這個請求,它傳遞 arg1, arg2, 和 arg3 參數(shù)給腳本. 你然后能在腳本中使用這些參數(shù). 這個方法有時叫查詢, 因為早期它用在搜索功能中.
練習(xí)2: 檢查是否有人登陸.
既然你知道怎樣使用參數(shù),讓我們繼續(xù)上面的例子pinglaura,通過修改這個例子我們得到下面這個腳本pinggeneric. 我們?nèi)€不同題目: #!/bin/shecho "Content-type: text/html"echoecho "<HTML><HEAD>"echo "<TITLE>Are You There?</TITLE>"echo "</HEAD><BODY>"在上面的例子中, 下一步應(yīng)該是測試我是否登陸,在這里我們用參數(shù)${1}代替我的名字lemay,  ${1}作為第一個參數(shù), ${2}作為第二個, ${3}作為第三個. ison='who | grep "${1}"'

剩下的所有修改如下: if [ ! -z "$ison" ]; then        echo "<P>$1 is logged in"else        echo "<P>$1 isn't logged in"fiecho "</BODY></HTML>"好了,讓我們修改HTML頁中的連接吧!原來是這樣: <A >Is Laura Logged in?</A>修改為通用查詢功能后是這樣,比如查詢名字叫john的人是否登陸: <A >Is John Logged in?</A>在你的服務(wù)器上試試,看是否有結(jié)果。

傳遞其他信息給腳本

有第二種方法傳遞信息給CGI腳本. 它叫作路徑信息path information 用作那些在腳本調(diào)用是不用變更的參數(shù), 象一個臨時文件名或調(diào)用腳本自己的文件名. 正如你看到的,在上面的例子問號后面的參數(shù)是因用戶表單的輸入而改變的. 路徑信息Path info用作其他信息傳遞給腳本,實際上,你可以用它作任何事情.

路徑信息Path information是一種不象通常參數(shù)腳本那樣頻繁傳遞信息的方法. 路徑Path information通常是指Web服務(wù)器上的那些比如配置文件、臨時文件或者被腳本因問題調(diào)用的文件等等此類文件.  
看下面一個路徑信息path information例子, : http://myhost/cgi-bin/myscript/remaining_path_info?arg1+arg2當(dāng)腳本運行時,在路徑中的信息將被放置于環(huán)境參數(shù)PATH_INFO. 你能在你的腳本內(nèi)容中使用這些信息. 比如說, 讓我們假設(shè)你在多頁上已有多個連接到同一個腳本. 你能用這個路徑信息顯示那個有連接的HTML文件名. 這樣, 在你完成處理你的腳本之后, 當(dāng)你發(fā)回一個HTML文件時, 你能在這個文件里包含一個連接,發(fā)回用戶一開始那個頁。 你會在下一章節(jié)學(xué)到更多路徑信息:有用的表單和腳本. 待后來登出

創(chuàng)建一個非凡的腳本輸出

現(xiàn)在你已經(jīng)學(xué)習(xí)了諸如輸出數(shù)據(jù) 一般地HTML數(shù)據(jù) 發(fā)給瀏覽器解釋顯示的數(shù)據(jù). 但是假如你不想把腳本結(jié)果作為一個數(shù)據(jù)流形式發(fā)回瀏覽器,而是想把一個存在的頁發(fā)回,怎么辦? 假如你只是要腳本做一些事而不讓任何結(jié)果回答給瀏覽器,怎么辦? 不用怕, 這里開始解釋這些情況.

用調(diào)用另一個文本作為響應(yīng)

CGI輸出不是非得一個數(shù)據(jù)流,有時可以告訴瀏覽器是存在服務(wù)器上的一個頁,為了發(fā)出這個信息,看下面的例子: Location: ../docs/final.html這個Location行用作通常的輸出位置,也就是說,假如你用了Location, 你就不必再用象Content-type這樣的數(shù)據(jù)輸出(實際上,你也不能). 正如Content-type, 你也必須在這一行后面跟一個空行. 指向這個文件的路徑可以是一個URL或相對路徑. 所有相對路徑是指相對于腳本所在的位置. 例子中的final.html文本是在當(dāng)前上一個目錄下docs的目錄下: echo Location: ../docs/final.htmlecho
你不能Content-type 和 Location兩個輸出同時使用. 比如, 假如你想輸出一個標準頁,但是想在這個頁尾加上客戶的內(nèi)容, 你就得用Content-type自行組建這兩個部分. 注重:你可以用腳本命令打開一個當(dāng)?shù)匚募鳛閿?shù)據(jù)直接將之輸出.

No Response

有時對于一個CGI腳本也許一點沒有輸出. 有時你只是要從用戶那兒收集點信息. 你就不用再調(diào)用一個新文本, 也不用輸出結(jié)果或打開一個存在的文件. 在瀏覽器上的屏幕還是那個樣子. 很幸運, 這一切很輕易. 你只要輸出下面這個命令即可(后面跟一個空行): echo Status: 204 No Responseecho這個Status頭部提供狀態(tài)碼給服務(wù)器(并且也給瀏覽器). 非凡的204將傳遞給瀏覽器,假如能識別它,它將什么也不做.
 
盡管無響應(yīng)是一個官方HTTP規(guī)定的一部分,但也并不是適合所有的瀏覽器,也許會產(chǎn)生希奇的結(jié)果,那你要多試驗試試看啦.

處理表單的腳本

今天,大多數(shù)CGI腳本是用來處理表單輸入的. 這個過程大致象上面說闡述的一樣,但還是有些不同,比如CGI腳本只要被調(diào)用;數(shù)據(jù)怎樣從服務(wù)器被發(fā)向瀏覽器. 記住, 大多數(shù)表單有兩個部分: HTML的表單格式;處理表單數(shù)據(jù)的CGI腳本. 這個CGI腳本使用標簽<FORM>屬性調(diào)用的.

表單形式和表單腳本

正如上面所說,由于表單有兩個部分. 如下: 這個ACTION屬性包含著處理表單的腳本: <FORM ACTION="http://www.popchina.com/cgi-bin/在這個表單中, 每個輸入?yún)^(qū)都有一個NAME的屬性, 用來稱呼表單元素. 當(dāng)這個表單數(shù)據(jù)被遞交給你在ACTION中定義的CGI腳本, 這樣這些name和輸入內(nèi)容被作為一個數(shù)字或字符傳遞給腳本.

GET 和 POST

表單從瀏覽器發(fā)給服務(wù)器有兩種方法.  GET 和 POST. 我們上面談?wù)摰姆椒?,實際是GET,它將數(shù)據(jù)打包放置在環(huán)境變量QUERY_STRING中作為URL整體的一部分傳遞給服務(wù)器。 POST做很多類似GET同樣的事情, 不同的地方就是它是分離地傳遞數(shù)據(jù)給腳本. 你的腳本通過標準輸入獲取這些數(shù)據(jù). (有些Web服務(wù)器是存儲在臨時文件中.) 這個QUERY_STRING環(huán)境變量將不再設(shè)置. 那你用那個方法呢? POST是個安全的方法, 尤其假如你的表單中有很多數(shù)據(jù)的話. 當(dāng)你用GET, 這個服務(wù)器就分配變量QUERY_STRING給所有的表單數(shù)據(jù), 但是這個變量可存儲量是有限的. 換句話說,假如你有很多數(shù)據(jù)但是你又用GET,你會丟失很多數(shù)據(jù). 假如你用POST, 你可以盡可能多地使用數(shù)據(jù), 因為這些數(shù)據(jù)從來也不分配到一個變量里.

URL 編碼

URL 編碼是一種瀏覽器用來打包表單輸入的格式. 瀏覽器從表單中獲取所有的name和其中的值,將他們作為name/value參數(shù)編碼, 移去那些不能傳送的字符, 將數(shù)據(jù)排行等等,這些還取決于你用GET還是POST?作為URL的一部分或者分離地發(fā)給服務(wù)器. 不管哪種情況, 在服務(wù)器端的表單輸入格式樣子象這樣: theName=Ichabod+Crane&gender=male&status=missing&headless=yesURL編碼遵循下列規(guī)則:
  • 每對name/value由&符分開.
  • 每對來自表單的name/value由=符分開. 假如用戶沒有輸入值給這個name,那么這個name還是出現(xiàn),只是無值(象這樣 "name=").
  • 任何非凡的字符(就是那些不是簡單的七位ASCII,如漢字) 將以百分符%用十六進制編碼. 當(dāng)然也包括象 =, &, 和 % 這些非凡的字符.
  • 在輸入?yún)^(qū)中的空格將以加號+顯示.
因為表單輸入是用這個URL編碼傳遞給你的腳本的,在你用這些參數(shù)之前必須解碼,因為解碼是個很普遍的工作,可以有很多工具做這個工作 . 你沒有必要自己寫這個解碼程序. 這里介紹一個叫uncgi的解碼程序, 你可以從http://www.hyperion.com/~koreth/uncgi.html. 得到原碼,安裝在你自己的cgi-bin目錄下.
練習(xí)3: 告訴我你的名字.
讓我們以這個例子來說明,如圖5. 圖5. 告訴我你的名字的表單. 這個輸入被發(fā)給腳本, 然后發(fā)回顯示一個hello的信息(間圖.6). 假如你在姓名輸入處不輸入任何東東,會怎樣?見圖7. 圖6. 姓名表單的結(jié)果. 圖7. 另一個結(jié)果.
修改表單的HTML
現(xiàn)在我們舉一個真實的例子: <FORM METHOD=POST ACTION="../cgi-bin/form-name"></FORM>假如你在用uncgi從input中解碼, 情況有點不同. 為了是uncgi正常工作, 你首先必須調(diào)用uncgi , 假如uncgi是個目錄,加上實際的腳本名, 象這樣: <FORM METHOD=POST ACTION="../cgi-bin/uncgi/form-name"></FORM>這樣,你不必修改表單中原始的HTML; 原始的HTML可以工作得很好.
腳本
處理表單輸入的是個CGI腳本, 讓我們來仔細地看看。 在腳本中第一步是解碼,在這個例子中, 我們已經(jīng)使用uncgi解碼輸入數(shù)據(jù), 實際這個表單已經(jīng)為你做好解碼. 通過建立一個uncgi的目錄,一旦表單遞交給服務(wù)器,服務(wù)器會自動進行解碼,這樣,所有的name/value已經(jīng)預(yù)備就緒等待你的使用. 現(xiàn)在,一個例子開始部分假設(shè)是下面這樣: echo Content-type: text/htmlechoecho "<HTML><HEAD>"echo "<TITLE>Hello</TITLE>"echo "</HEAD><BODY>"echo "<P>"接下來,有兩種情況要處理:一件是處理用戶不輸入名字的情況,一個是假如輸入了向他們說hello. 這個Name元素的值, 是包含在WWW_theName環(huán)境變量中. 用一個簡單的測試命令(-z), 你能查看環(huán)境變量是否是空的還是包括相應(yīng)的輸出值: if [ ! -z "$WWW_theName" ]; then    echo "Hello, "    echo $WWW_theNameelse    echo "You don't have a name?"fi最后增加一個連接"go back" . 用來返回: echo "</P><P><A HREF="../lemay/name1.html">Go Back</A></P>"echo "</BODY></HTML>" 

問題

這里是使用CGI腳本比較普遍的問題:
  • 腳本內(nèi)容只顯示不執(zhí)行. 你正確配置了你的服務(wù)器運行CGI腳本? 你的腳本是放置在cgi-bin目錄中嗎?假如你的服務(wù)器答應(yīng)帶.cgi擴展名的CGI運行, 你的腳本文件名的擴展名是這樣嗎?
  • Error 500: Server doesn't support POST. 解答還是如上一條一樣,然后你用命令行執(zhí)行你的CGI,可以正常運行嗎?是否有錯誤?.
  • Document contains no data. 確定你的頭部行和數(shù)據(jù)部之間有一空行.
  • Error 500: Bad Script Request. 確定你的腳本是可執(zhí)行的(在UNIX, 用chmod +x 你的腳本.cgi). 在從瀏覽器運行之前,你應(yīng)當(dāng)從命令行運行你的腳本,假如客戶端是win95,可以用telnet登陸你的服務(wù)器,執(zhí)行命令行,當(dāng)然必須了解UNIX命令.

CGI變量

表2 總結(jié)那些環(huán)境變量.
    表2. CGI 環(huán)境變量.
 
環(huán)境變量         意義
SERVER_NAMECGI腳本運行時的主機名和IP地址.
SERVER_SOFTWARE你的服務(wù)器的類型如: CERN/3.0 或 NCSA/1.3.
GATEWAY_INTERFACE運行的CGI版本. 對于UNIX服務(wù)器, 這是CGI/1.1.
SERVER_PROTOCOL服務(wù)器運行的HTTP協(xié)議. 這里當(dāng)是HTTP/1.0.
SERVER_PORT服務(wù)器運行的TCP口,通常Web服務(wù)器是80.
REQUEST_METHODPOST 或 GET, 取決于你的表單是怎樣遞交的.
HTTP_ACCEPT 瀏覽器能直接接收的Content-types, 可以有HTTP Accept header定義.
HTTP_USER_AGENT遞交表單的瀏覽器的名稱、版本 和其他平臺性的附加信息。
HTTP_REFERER遞交表單的文本的 URL,不是所有的瀏覽器都發(fā)出這個信息,不要依靠它
PATH_INFO附加的路徑信息, 由瀏覽器通過GET方法發(fā)出.
PATH_TRANSLATED在PATH_INFO中系統(tǒng)規(guī)定的路徑信息.
SCRIPT_NAME指向這個CGI腳本的路徑, 是在URL中顯示的(如, /cgi-bin/thescript).
QUERY_STRING腳本參數(shù)或者表單輸入項(假如是用GET遞交). QUERY_STRING 包含URL中問號后面的參數(shù).
REMOTE_HOST遞交腳本的主機名,這個值不能被設(shè)置.
REMOTE_ADDR遞交腳本的主機IP地址.
REMOTE_USER遞交腳本的用戶名. 假如服務(wù)器的authentication被激活,這個值可以設(shè)置。
REMOTE_IDENT假如Web服務(wù)器是在ident (一種確認用戶連接你的協(xié)議)運行, 遞交表單的系統(tǒng)也在運行ident, 這個變量就含有ident返回值.
CONTENT_TYPE假如表單是用POST遞交, 這個值將是 application/x-www-form-urlencoded. 在上載文件的表單中, content-type 是個 multipart/form-data.
CONTENT_LENGTH對于用POST遞交的表單, 標準輸入口的字節(jié)數(shù).

表單輸入的解碼程序

目前有兩個程序: 通用目的的uncgi, 和cgi-lib.pl, 這是個Perl庫,用于perl編寫的CGI腳本. 當(dāng)然也有表單上載時可以解碼的程序,很少。

uncgi

說明原碼可以從 http://www.hyperion.com/~koreth/uncgi.html獲得。

cgi-lib.pl

這是由Steve Brenner編寫的, 幫助你治理輸入. 他能從GET和POST獲取輸入并且放置在一個Perl列表或陣列中. 更新的版本也能處理來自表單的文件上傳. 從這兒可以得到信息與原碼 http://www.bio.cam.ac.uk/cgi-lib. 假如你決定用Perl語言處理你的表單輸入,cgi-lib是個很好的庫. 為了使用cgi-lib.pl,你通常要這樣寫:
#!/usr/lib/perl require 'cgi-lib.pl';cgi-lib中盡管有很多子程序, 最重要的是ReadParse子程. ReadParse 讀取輸入方便地將name/value儲存在一個Perl陣列中. 在你的Perl腳本中通常是這樣調(diào)用的: &ReadParse(*in);此例中,陣列名是in, 可以隨便取名的. 在表單輸入解碼后, 你能讀取和處理這個name/value,方法是象下面這樣: print $in{'theName'};這個將顯示名字name是theName的值value. 假如你有多個用同樣名字的name對, cgi-lib.pl用(/0)分隔多個名字. 這樣可以正常處理你的腳本.

解碼上傳的文件輸入

基于表單的文件上傳需要不同的表單輸入,有一些程序可以對其進行解碼。 cgi-lib.pl 后來版本可以很好支持, 在http://www.bio.cam.ac.uk/cgi-lib/ 了解更多的情況. 另一個處理用Perl編寫的CGI地址是 http://valine.ncsa.uiuc.edu/cgi_docs.html .

自己做

找專門書籍學(xué)習(xí)吧: ftp://ds.internic.net/rfc/rfc1867.txt.

非解剖的腳本頭部

按照本書闡述,大多數(shù)情況可以正常操作,在一些情況下不是這樣的,你可以翻閱說明書了解。

<ISINDEX> 腳本

為了在CGI中完成討論組, 我們看看叫<ISINDEX>的搜索. 這是早期在瀏覽器中用來向服務(wù)器發(fā)出搜索要害字的辦法,參看以前的資料。

總結(jié)

CGI腳本, 有時叫服務(wù)器端腳本或網(wǎng)關(guān)腳本。 在internet上有很多免費資源,你可以搜索下載讀懂他們,當(dāng)然都是英文的,假如你下決心
翻譯他們(可能更加強理解). 這樣一舉兩得啊. 注重:上述程序可以用ultra edit來編輯,注重轉(zhuǎn)換UNIX格式 ,必須采用UNIX格式存盤,再上載,用telnet登陸,在命令行鍵入perl sample.pl,看有無bug,再 在瀏覽器中調(diào)用。CGI程序包括放置CGI的目錄一定要改屬性為777, 要寫入的HTML文件也要改屬性為777. 現(xiàn)在網(wǎng)上有很多免費的cgi,基本可以滿足一般需求,請到這個網(wǎng)址查詢你要的cgi:http://www.itm.com/cgicollection/ 本人漢化了一個古老的通用留言簿,大家可以拿去做自己的留言簿。這里下載


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
免费高清视频在线观看| 欧美怡春院一区二区三区| 亚洲精品三级| 日韩免费一级片| 日韩欧美三级视频| 国产熟女精品视频| 日韩精品福利片午夜免费观看| 日韩美女主播在线视频一区二区三区| 最新亚洲人成网站在线观看| 91久久精品www人人做人人爽| 激情综合色综合久久综合| 狠狠狠综合7777久夜色撩人| 91久久国产综合久久91猫猫| 日韩在线免费观看视频| 欧美亚洲视频在线观看| 精品国偷自产一区二区三区| 伊人久久综合97精品| 奇米777第四色| 99久久精品99国产精品| 欧美激情视频一区二区三区| 亚洲欧美综合自拍| 欧美成人精品福利网站| 性欧美16一18| 国产成人丝袜美腿| 无码人妻精品一区二区三区蜜桃91| 日韩免费在线视频观看| 久久99精品久久久久子伦| 国产日本久久| 中文字幕一区二区三区四区免费看| 91麻豆精品国产91久久久资源速度| 欧美日韩视频在线一区二区| 久久精品99国产精品| 国产成人精品自拍| 亚洲情综合五月天| 欧美体内she精视频在线观看| 成人性生活av| 成年女人免费毛片视频永久| 美女福利一区二区| 亚洲精品456在线播放狼人| 欧洲s码亚洲m码精品一区| 国产a级网站| 亚洲成人中文| 久久一区激情| 99精品视频免费观看视频| 久久久噜噜噜久噜久久综合| 日本国产一区二区| 少妇性色午夜淫片aaa播放| 99re资源| 青青草原国产免费| 欧美日韩一区二区三区在线电影| 超碰97在线资源站| 日本色护士高潮视频在线观看| 欧美变态凌虐bdsm| 精品国产91亚洲一区二区三区www| 国产乱码精品一区二区三区卡| 同性视频网站免费男| 欧美最猛性xxxx免费| 国产黄色一级网站| 日韩精品高清视频| 能在线观看的av| 综合干狼人综合首页| 暖暖影院日本高清...免费| 日韩成人精品视频在线观看| 国产后进白嫩翘臀在线观看视频| 欧美三级三级三级爽爽爽| 欧美va在线播放| 国产探花在线视频| 欧美亚洲日本在线观看| 天天影视网天天综合色在线播放| 林ゆな中文字幕一区二区| 亚洲另类在线一区| 一区二区在线高清视频| 日本一区二区网站| 99久久精品久久亚洲精品| 国产一级片自拍| 精品国产一区二区三区成人影院| 日韩av123| 在线免费观看一区| 香港三日本8a三级少妇三级99| 精品第一国产综合精品aⅴ| 亚洲va国产日韩欧美精品色婷婷| 午夜男人视频在线观看| 欧美福利视频导航| 四虎在线精品| 三级a三级三级三级a十八发禁止| 欧美激情精品久久久久久蜜臀| 亚洲免费毛片网站| 国产aⅴ精品一区二区四区| 日本成人黄色片| 亚洲成人直播| 99re久久最新地址获取| 黑吊大战白xxxxxx| 91在线国产福利| 尤物av无码色av无码| 九九精品视频免费| 日本视频免费一区| 精品日韩免费| 亚洲天堂视频网| 国产精品美女免费看| 久久不见久久见中文字幕免费| 国产日韩欧美大片| 亚洲欧洲日韩国产| 久久av中文| 亚洲黄色免费看| 高清日韩中文字幕| 婷婷成人基地| 川上优的av在线一区二区| 精品免费日产一区一区三区免费| 欧美中文字幕视频在线观看| 欧美一区二区啪啪| 瑟瑟视频在线观看| 在线免费观看成人短视频| 成人欧美一区二区三区黑人麻豆| 亚洲一区网址| 国产亚洲激情视频在线| 咪咪网在线视频| 亚洲第一免费播放区| 国产精品一区二区你懂的| 成人精品第一区二区三区| 精久久久久久久久久久| 精品人妻无码一区二区性色| 欧美激情一区二区三区四区| 久久精品国产v日韩v亚洲| 中文字幕jux大岛优香| 色综合久久88色综合天天提莫| 国产亚洲成人一区| 一本色道久久99精品综合| 日韩精品黄色网| 30一40一50老女人毛片| 青青草在线视频免费观看| 日本少妇全体裸体洗澡| 中文字幕第一页久久| 久久久久久久国产| 日韩av大片在线| 午夜美女福利视频| 日韩av福利在线观看| 精品久久免费视频| 国产精品丝袜在线播放| 成人免费在线看片| 日本午夜精品理论片a级appf发布| 天天干天天爽天天射| 国产一区电影| 国语自产在线不卡| 综合久久婷婷| 日韩美女啊v在线免费观看| a级在线观看视频| 日韩欧美三级在线| 亚洲欧洲成人自拍| 亚洲视频一起| 国产变态拳头交视频一区二区| 成人av在线播放网站| 手机看片福利永久| gogogo高清免费观看在线视频| 色视频线观看在线播放| 手机在线免费观看av| 九九九九九九九九| 亚洲综合电影一区二区三区| 国产精品xx| 亚洲精品国偷自产在线99热| 日韩欧美一级二级三级久久久| 亚洲婷婷综合久久一本伊一区| www插插插无码视频网站| 欧美一区二区三区四区在线| 久久久久免费视频| 男人舔女人下部高潮全视频| 欧美性狂猛xxxxxbbbbb| 黑丝av在线播放| 欧美午夜理伦三级在线观看| 亚洲精品狠狠操| 老司机精品影院| 亚洲精品网址| 韩日成人在线| 91在线色戒在线| 国产在线欧美| 中文字幕一区二区三区电影| 国产熟人av一二三区| 最新日本中文字幕| 色哟哟国产精品色哟哟| www日韩中文字幕在线看| 在线视频中文亚洲| 亚洲乱码一区二区三区| 夜夜添无码一区二区三区| 国产欧美最新羞羞视频在线观看| 九九亚洲精品| 午夜成人鲁丝片午夜精品| 一区视频免费观看| 成年大片免费视频播放二级| 97香蕉久久超级碰碰高清版| 色综合色综合色综合色综合色综合| 久国内精品在线| 国产农村妇女毛片精品久久莱园子| 91激情在线视频| 性欧美8khd高清极品| 成人高清视频在线观看| 在线观看欧美日韩国产| 国产资源在线免费观看| 日韩va亚洲va欧美va清高| 7777kkk亚洲综合欧美网站| 狠狠擦狠狠操| www.性欧美| 久久国产婷婷国产香蕉| 色老板在线视频一区二区| 国产精品xx| 日本一区二区三区精品| 在线理论视频| 国产精品久久久久久久久果冻传媒| 男女啪啪无遮挡| 亚洲精品乱码久久久久久动漫| 搞黄视频在线观看| av中文字幕亚洲| 激情欧美日韩| 天天综合网久久| 中文字幕日韩在线观看| 欧美精品一区二区三区高清aⅴ| 欧美一区三区| 久久精品国产美女| 蜜臀av国产精品久久久久| 中文字幕成人乱码在线电影| 污片免费在线观看| 欧美日韩国产精品激情在线播放| 国产高潮视频在线观看| 亚洲人成亚洲人成在线观看| 麻豆精品国产自产在线| 人人玩人人添人人澡欧美| 欧美亚洲视频一区二区| 欧美日韩ab片| 亚洲精品国产拍免费91在线| xxxxx91麻豆| 91网址在线观看精品| 免费欧美一区| 久久精品99北条麻妃| 亚洲精选在线视频| 日本免费福利视频| 精品丝袜久久| 欧美一级做一级爱a做片性| 亚洲肉体裸体xxxx137| 佐山爱痴汉视频一区二区三区| 香蕉精品久久| 一区三区自拍| 午夜精品一区二区三区电影天堂| 91免费福利视频| 精品久久无码中文字幕| 久久久久国产成人精品亚洲午夜| 婷婷四房综合激情五月| 日韩精品社区| 视频二区一区| 一区二区视频网| 五月天激情丁香| 性欧美丰满熟妇xxxx性仙踪林| 中文字幕在线国产精品| 国产aaaaaaaaa| 日韩欧美成人免费视频| 品久久久久久久久久96高清| 性8sex亚洲区入口| 久99久在线视频| 久久综合综合久久综合| 久久久久88色偷偷| 精品亚洲一区二区三区四区五区高| 国产精品一区二区三区精品| 超碰在线免费看| 午夜视频在线免费播放| 国产一区999| a优女a优女片| 国产尤物视频| 亚洲国产精品久久久久秋霞影院| 国产野外战在线播放| 91网站在线看| 成人免费高清视频在线观看| 成人欧美一区二区三区在线| 人人妻人人澡人人爽人人精品| 天然素人一区二区视频| av综合网页| www亚洲欧美| 日韩在线不卡av| 91.xxx.高清在线| 国产精品99999| 黄色在线免费观看| 麻豆视频免费在线观看| 一区二区美女| 国产99re66在线视频| 国产欧美日韩麻豆91| 精品久久久久久久久久久国产字幕| 国产精品毛片aⅴ一区二区三区| 亚洲成人蜜桃| 久久国产成人精品国产成人亚洲| 久久影视电视剧免费网站| 亚洲天堂av高清| 中文在线а√天堂官网| 亚州av在线播放| 日韩色淫视频| 久久精品中文字幕一区二区三区| 欧美激情亚洲自拍| 亚洲精品久久久久久久久久久久久久| 丁香花视频在线观看| av日韩在线网站| 国产黑丝在线一区二区三区| 成人h视频在线观看播放| 亚洲经典视频| 91精品人妻一区二区三区蜜桃2| 五月天丁香综合久久国产| 日韩在线视频免费看| 97久久精品一区二区三区的观看方式| 国产精品视频yy9099| 一区二区三区黄色| 极品美女销魂一区二区三区| av毛片久久久久**hd| 亚洲91精品在线观看| 成人性生交大片免费看视频r| 岛国精品一区二区| 日韩一本精品| 亚洲高清视频一区二区| 91精品视频大全| 青青青草原在线| 五月天色婷婷丁香| caoporn国产精品| 精品在线99| 国产一区精品福利| 农民人伦一区二区三区| 亚州av日韩av| 日本在线丨区| 成人18免费| 亚洲国产激情av| 欧美性视频在线播放| 国产乱子轮xxx农村| 国产精品久久久久久久久毛片| 另类尿喷潮videofree| 色呦呦在线免费观看| 国产在线高清精品|