下面是一個簡單的CGI程序,它將HTML中Form的信息直接輸出到We b瀏覽器。 # include <stdio.h> # include <stdib.h> main() { int i , n ; PRintf (″Content type: text/plain/n/n″); n=0; if(getenv(″CONTENT-LENGTH″)) n=atoi(getenv(CONTENT-LENGTH″)); for (i=0;i<n;i++) putchar(getchar()); putchar (′/n′); fflush(stdout); }
下面對此程序作一下簡要的分析。 prinft (″Content type :text/plain/n/n″); 此行通過標準輸出將字符串″Content type :text/plain/n/n″傳送給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程序就無法知道什么時候輸入結束了。
CGI程序產生的輸出由兩部分組成:MIME頭信息和實際的信息。兩部分之間以一個空行分開。我們已經看到怎樣使用MIME頭信息″Content type :text/plain/n/n″和printf()、put char()等函數調用來輸 出純ASCII文本給Web服務器。實際上,我們也可以使用MIME頭信息″Content type :text/html/n/n″來輸出HTML源代碼給Web服務器。請注重任何MIME頭信息后必須有一個空行。一旦發送這個MIME頭信息給We b服務器后,Web瀏覽器將認為隨后的文本輸出為HTML源代碼,在HTML源代碼中可以使用任何HTML結構,如超鏈、圖像、Form,及對其他CGI程 序的調用。也就是說,我們可以在CGI程序中動態產生HTML源代碼輸出 ,下面是一個簡單的例子。
#include <stdio.h> #include <string.h> main() { printf(″Contenttype:text/html/n/n″); printf(″<html>/n″); printf(″<head><title>An HTML Page From a CGI</title></h ead>/n″); printf(″<body><br>/n″); printf(″<h2> This is an HTML page generated from with i n a CGI program.. .</h2>/n″); printf(″<hr><p>/n″); printf(″<a href="../output.html#two"><b> Go back to out put.html page < /b></a>/n″); printf(″</body>/n″); printf(″</html>/n″); fflush(stdout); }