« 71. 網頁如何呼叫 CGI 程式? | (回到Blog入口) | 73. PHP 如何讀取系統的環境變數? »

72. 表單的資料如何傳遞給 CGI?

jollen 發表於 October 27, 2006 7:59 PM

傳遞資料給 CGI 程式的方法有 2 種:GET 與 POST。GET 與 POST 是兩種不同的資料傳遞方式。

GET 方法

GET 會將資料當成是 URL 的一部份,例如:

http://www.jollen.org/view.php?page=15&number=75

「?」問題區隔 CGI 程式的名稱與資料,資料間以「&」(AND) 符號隔開,每筆資料都是 name=value 的格式。? 問號後的字串即為要送給伺服器端的資料,送入的資料會被擺放至 QUERY_STRING 環境變數裡,CGI 程式可以經由 QUERY_STRING 環境變數來讀取送入的資料。

POST 方法

POST 會以標準輸入的方式將資料送給 CGI 程式,CGI 程式則經由標準輸入來讀取這些資料。由表單送入的資料一樣都是 name=value 的格式,送入資料的字串長度則被存放在 CONTENT_LENGTH 的環境變數裡。

實際在傳送資料時,瀏覽器先向伺服器送出一個 request,再將資料送給伺服器:

POST /view.php HTTP/1.0 . .header 的部份 . Content-length: 32 name=value . . .

那麼,到底我們的程式要如何知道用戶端是使用那一種方式來傳遞資料呢?在 PHP 裡,不管是那一種方式,由表單送入的 name=value 資料格式都可以經由全域變數 $name 來讀取。

在其它 CGI 程式裡,可以利用 REQUEST_METHOD 環境變數來判斷資料的傳遞方式,當資料的傳遞方式是 GET 時,REQUEST_METHOD = "GET",同理,當資料的傳遞方式是 POST 時,REQUEST_METHOD = "POST"。

GET 與 POST 之間最大的差異在於:

1. 使用 GET 可以不必利用表單即可傳送參數給 CGI 程式。
2. 使用 GET 時,URL 有長度限制。
3. 使用 POST 時,傳入的字串長度沒有限制。

--jollen

版權聲明

請參閱頁面底部的 CC 授權條款。此外,Jollen's PHP 專欄禁止引用、修改與轉貼,如果您想與朋友分享的話,我們只允許網站連結(hyperlink)的形式。

發表一個評論

(如果你此前從未在此 Blog 上發表過評論,則你的評論必須在 Blog 主人驗證後才能顯示,請你耐心等候。)

| Top | Jollen's Forum |
Jollen's PHP 專欄採用 Attribution-NonCommercial-NoDerivs 2.5 授權條款
Copyright(c) 2001-2007,2010 www.jollen.org