用C語言技術進行CGI程式設計(轉)

ba發表於2007-08-15
用C語言技術進行CGI程式設計(轉)[@more@]一、CGI概述 CGI(公用閘道器介面)規定了Web伺服器呼叫其他可執行程式(CGI程 序)的介面協議標準。Web伺服器透過呼叫CGI程式實現和Web瀏覽器的互動 ,也就是CGI程式接受Web瀏覽器傳送給Web伺服器的資訊,進行處理,將響應結果再回送給Web伺服器及Web瀏覽器。CGI程式一般完成Web網頁中表單(Form)資料的處理、資料庫查詢和實現與傳統應用系統的整合等工作。CGI程式可以用任何程式設計語言編寫,如Shell指令碼語言、Perl、Fortran、Pascal、C語言等。但是用C語言編寫的CGI程式具有執行速度快、安全性高(因為C語言程式是編譯執行且不可被修改)等特點。 CGI介面標準包括標準輸入、環境變數、標準輸出三部分。 1.標準輸入 CGI程式像其他可執行程式一樣,可透過標準輸入(stdin)從Web伺服器得到輸入資訊,如Form中的資料,這就是所謂的向CGI程式傳遞資料的POST方法。這意味著在作業系統命令列狀態可執行CGI程式,對CGI程式進行除錯。POST方法是常用的方法,本文將以此方法為例,分析CGI程式設計的方法、過程和技巧。 2.環境變數 作業系統提供了許多環境變數,它們定義了程式的執行環境,應用程式可以存取它們。Web伺服器和CGI介面又另外設定了自己的一些環境變數,用來向CGI程式傳遞一些重要的引數。CGI的GET方法還透過 環境變數QUERY-STRING向CGI程式傳遞Form中的資料。 3.標準輸出 CGI程式透過標準輸出(stdout)將輸出資訊傳送給Web伺服器。傳送給Web伺服器的資訊可以用各種格式,通常是以純文字或者HTML文字的形式,這樣我們就可以在命令列狀態除錯CGI程式,並且得到它們的輸出。 下面是一個簡單的CGI程式,它將HTML中Form的資訊直接輸出到Web瀏覽器。 #include #include main() {  int,i,n; printf (″Contenttype:text/plain ″); n=0; if(getenv(″CONTENT-LENGTH″)) n=atoi(getenv(CONTENT-LENGTH″)); for (i=0;i putchar(getchar()); putchar (′ ′); fflush(stdout); } 下面對此程式作一下簡要的分析。:  prinft (″Contenttype:text/plain ″); 此行透過標準輸出將字串″Contenttype:text/plain ″傳送給Web伺服器。它是一個MIME頭資訊,它告訴Web伺服器隨後的輸出是以純ASCII文字的形式。請注意在這個頭資訊中有兩個新行符,這是因為Web伺服器需要在實際的文字資訊開始之前先看見一個空行。 if (getenv(″CONTENT-LENGTH″)) n=atoi (getenv(″CONTENT-LENGTH″)); 此行首先檢查環境變數CONTENT-LENGTH是否存在。Web伺服器在呼叫使用POST方法的CGI程式時設定此環境變數,它的文字值表示Web伺服器傳送給CGI程式的輸入中的字元數目,因此我們使用函式atoi() 將此環境變數的值轉換成整數,並賦給變數n。請注意Web伺服器並不以檔案結束符來終止它的輸出,所以如果不檢查環境變數CONTENT-LENGTH,CGI程式就無法知道什麼時候輸入結束了 for (i=0;i #include main() {  printf(″Contenttype:text/html ″); printf(″ ″); printf(″ ″); printf(″
″); printf(″

This is an HTML page generated from with i n a CGI program.. .

″); printf(″

″); printf(″ ″); printf(″ ″); printf(″ ″); fflush(stdout); } 上面的CGI程式簡單地用printf()函式來產生HTML原始碼。請注意在輸出的字串中如果有雙引號,在其前面必須有一個後斜字元, 這是因為整個HTML程式碼串已經在雙引號內,所以HTML程式碼串中的雙引號符必須用一個後斜字元來轉義。 五、結束語 本文詳細分析了用C語言進行CGI程式設計的方法、過程和技巧。C語言的CGI程式雖然執行速度快、可靠性高,但是相對於Perl語言來說,C語言缺乏強有力的字串處理能力,因此在實際應用中,應根據需 要和個人愛好來選擇合適的CGI程式設計語言。

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/10617731/viewspace-957384/,如需轉載,請註明出處,否則將追究法律責任。

相關文章