Jollen's PHP 專欄「2.12 PHP 與 CGI 程式設計」裡的所有文章!

  

70. 什麼是 CGI?

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

CGI 為 Common Gateway Interface 的簡寫,簡而言之,CGI 就是在不同作業平臺與不同的 Web server 間,能讓瀏覽器輸入與解讀輸出的界面,CGI 的標準依賴 HTML 與 HTTP 而來。CGI 只是一種技術,而不是程式語言,撰寫 CGI 程式時,可以使用各種不同的程式語言。 例如,我們在 UNIX 或 Windows NT 上都可以利用瀏覽器並且透過一樣的界面規格來執行伺服器端的程式並傳入參數,這種技術就是 CGI。可撰寫 CGI 程式的程式語言當然不限於一種,一般最常用來撰寫 CGI 的程式語言有 Perl 和 C 語言。 C 語言是 UNIX 系統最普通的語言,Perl 具有優秀的字串處理能力,所以常被用來做與字串處理的工作。在 Windows 系統下,還可以使用...

71. 網頁如何呼叫 CGI 程式?

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

呼叫 CGI 程式,可以透過 HTML 的 <form> 標籤,例如留言板程式: <form method="POST" action="post.php"> <p>您的大名: <input type="text" name="username" size="20"><br> 電子信箱: <input type="text" name="email" size="20"><br> 留言內容: <textarea rows="2" name="messages" cols="20"></textarea></p> <p><input type="submit" value="送出留言" name="B1"><input type="reset" value="重填" name="B2"></p> </form> 這是利用表單的寫法。另外,我們也可以直接指定 CGI 程式的 URL 給瀏覽器,例如,在瀏覽器的位址例輸入: http://www.jollen.org/guestbook/post.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 的環境變數裡。...

73. PHP 如何讀取系統的環境變數?

jollen 發表於 October 27, 2006 8:02 PM

系統的環境變數在 PHP 裡也是以全域變數的方式讀取,例如 REQUEST_METHOD 環境變數,在 PHP 裡即為 $REQUEST_METHOD,如同全域變數一般。 這是一個輸出系統一些有用的環境變數的範例程式: <html> <head> </head> <body> <?php echo "<pre>\n"; echo "系統的 CGI 版本 : $GATEWAY_INTERFACE<BR>\n"; echo "您的 IP 位址 : $SERVER_NAME<BR>\n"; echo "您所使用的瀏覽器為: $HTTP_USER_AGENT<BR>\n"; echo "</pre>\n"; ?> </body> </html>...

74. 為什麼要做 URL 的解碼與編碼?

jollen 發表於 October 27, 2006 8:04 PM

CGI 程式與參數直接寫成 URL 時,為了能清楚分辨字元,在傳送前,瀏覽器會將 URL 做編碼的工作,例如: http://www.jollen.org/guestbook/post.php?name=Chen Jin-Hong&email=jollen <jollen@o3.net> 實際上,這行 URL 會被編碼成: http://www.jollen.idv.tw/guestbook/post.php?name=Chen+Jin-Hong&email=jollen %3Cjollen@o3.net%3E 空格的地方會以 "+" (加號) 取代,特殊字元會被轉換成對應的 ASCII 十六進位碼,所以 分別被編碼成 %3C 與 %3E。 當 CGI 程式讀進資料時,首要工作就是要進行解碼的工作,幸運的是,PHP 會自動幫我們做這件工作,所以我們不用擔心資料的解碼工作。 以上面的 URL 為例,在 PHP 裡,就可以經由 $name 與 $email 兩個 global 變數直接讀取傳入的資料。...

75. PHP 如何列印 URL 字串?

jollen 發表於 October 27, 2006 8:05 PM

假設我們撰寫的 PHP 要輸出一段超鍊結的 HTML,底下這段程式碼是錯誤的: <?php echo "<a href=\"viewpost.php?name=Chen Jin-Hong, jollen@o3.net\">Jollen 的留言</a>"; ?> 這段 HTML 的 URL 部份是錯誤的,因為並沒有對相關字元做編碼的工作。PHP 提供 rawurlencode() 函數來幫我們做這件工作,因此上面這段程式應該要改成: <?php $URL = rawurlencode("Chen Jin-Hong, jollen@o3.net"); echo "<a href=\"viewpost.php?$URL\">Jollen 的留言</a>"; ?> 只要是 URL,在輸出前,不管是利用 echo 或 print,都必須先使用 rawurlencode() 函數先編碼才能輸出。...

76. 什麼是 HTTP 的 mime-type 檔頭?

jollen 發表於 October 27, 2006 8:06 PM

CGI 程式與寫在 HTML 裡面的 PHP 程式最大的不同處在於,CGI 程式是獨立的程式,不只輸出要包括完整的標籤,也要有檔頭 (header) 的輸出,輸出檔頭的目地在告訴使用者端的瀏覽器,伺服器目前所要送出的是什麼型態的資料。 例如,我們現在要輸出的是 HTML 檔案,PHP 程式就必須輸出一個告訴瀏覽器,現在所要送出的是 text/html 型態的資料。利用 PHP 提供的 header() 函數即可完成這項工作: <?php header("Content-type: text/html"); ?> <html> </html> 要特別注意是,檔案行與行之間都是以 "\n" 換行做為區隔。我們也可以利用 echo 語法輸出檔頭,但要特別注意的是,[[輸出檔頭時,必須多空一行空白行]],也就是輸出 "\n\n" 兩個換行字元。例如: echo "Content type: text/html\n\n"; //等於 header("Content type: text/html");...

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