標籤:style blog http io ar color os 使用 sp
在上一節中成功的搭建了Apache伺服器,這節將介紹使用C語言開發能在Apache伺服器上啟動並執行CGI程式
安裝好Apache伺服器後,在C:\Program Files\Apache Software Foundation\Apache2.2下有一些用於開發Apache伺服器的檔案
檔案介紹:
bin:Apache伺服器軟體所在地
cgi-bi:儲存C語言寫的程式
conf:儲存伺服器設定的資訊
error:網站發送錯誤的處理
htdcocs:儲存HTML程式
icons:儲存開發Apache程式用的表徵圖
include:儲存開發web程式用到的一些標頭檔
lib:儲存的是開發web程式用到的一些庫
logs:日誌
manual:Apache伺服器語言的設定
modlules:儲存一些動態連結程式庫
程式執行個體1:開發一個CGI版的hello world程式
開發工具:VS2012 Apache伺服器
開發步驟:
首先使用VS2012編譯下面的代碼
#include <stdio.h>void main(){ //設定HTML語言 printf("Content-type:text/html\n\n"); //列印hello world, 我來自CGI //html中的分行符號為<br> printf("hello world, 我來自CGI !<br>");}
編譯成功後在工程目錄下的Debug檔案夾中會有一個exe格式的可執行檔,我編譯的程式中產生的是CGI編程.exe
將exe檔案複製到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin目錄下,並且修改檔案的格式,將CGI編程.exe改成hello.cgi
最後在IE瀏覽器中輸入http://localhost/cgi-bin/hello.cgi
程式執行個體2:遍曆Apache伺服器中所有的環境變數
首先使用VS2012編譯下面的代碼
#include <stdio.h>#include <stdlib.h>void main(){ //設定HTML語言 printf("Content-type:text/html\n\n"); printf("Eviroments:<br>"); //用於儲存環境變數 extern char** environ; //遍曆CGI中的所有環境變數 for(int i=0; ;i++) { if(NULL == environ[i]) { break; } //列印CGI中所有的環境變數 printf("%s<br>", environ[i]); }}
將exe檔案複製到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin目錄下,並且修改檔案的格式,將CGI編程.exe改成eviroments.cgi
最後在IE瀏覽器中輸入:http://localhost/cgi-bin/eviroments.cgi
程式執行個體3:使用環境變數獲得伺服器的類型
#include <stdio.h>#include <stdlib.h>void main(){ //設定HTML語言 printf("Content-type:text/html\n\n"); printf("%s ",getenv("SERVER_SOFTWARE"));}
執行結果:
程式執行個體4:使用環境變數輸出web資訊
#include <stdio.h>#include <stdlib.h>void main(){ //設定HTML語言 printf("Content-type:text/html\n\n"); //遞交表單的瀏覽器的名稱、版本 和其他平台性的附加資訊。 printf("%s<br><br>",getenv("HTTP_USER_AGENT")); //CGI指令碼運行時的主機名稱和IP地址 printf("%s<br><br>",getenv("SERVER_NAME")); //你的伺服器的類型如: printf("%s<br><br>",getenv("SERVER_SOFTWARE")); //指向這個CGI指令碼的路徑, printf("%s<br><br>",getenv("SCRIPT_NAME")); //遞交指令碼的主機名稱,這個值不能被設定. printf("%s<br><br>",getenv("REMOTE_HOST")); //遞交指令碼的主機IP地址. printf("%s<br><br>",getenv("REMOTE_ADDR")); //運行CGI的版本 printf("%s<br><br>",getenv("GATEWAY_INTERFACE")); //伺服器啟動並執行TCP口. printf("%s<br><br>",getenv("SERVER_PORT")); //伺服器啟動並執行HTTP協議. printf("%s<br><br>",getenv("SERVER_PROTOCOL"));}
執行結果:
程式執行個體5:遍在網頁中添加超連結
#include <stdio.h>#include <stdlib.h>void main(){ //設定HTML語言 printf("Content-type:text/html\n\n"); printf("<a href='http://www.baidu.com'>www.baidu.com</a>");}
執行結果:
程式執行個體6:使用環境變數實現參數1個傳遞
#include <stdio.h>#include <stdlib.h>void main(){ //設定HTML語言 printf("Content-type:text/html\n\n"); char Name[256]; //使用環境變數獲得傳遞的參數 char* queryString = getenv("QUERY_STRING"); //把一個字串解析到另一個字串中 //將獲得的字串中的%s列印到cName中 sscanf(queryString, "name=%s", Name); //列印傳遞的參數 printf("hello %s<br>", Name);}
使用VS2012編譯上面的代碼,編譯成功後,在工程目錄下的Debug檔案夾中會有一個exe檔案,將exe檔案修改成name.cgi,並且複製到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin中
最後在瀏覽器中輸入http://localhost/cgi-bin/name.cgi?name=Tom
執行結果
程式執行個體7:遍使用環境變數傳遞多個參數
#include <stdio.h>#include <stdlib.h>void main(){ //設定HTML語言 printf("Content-type:text/html\n\n"); int i1,i2;//定義2個變數用於接收傳遞的參數 //使用環境變數獲得傳遞的參數 char* queryString = getenv("QUERY_STRING"); //把一個字串解析到另一個字串中 //將獲得的字串中的%s列印到cName中 sscanf(queryString, "i1=%d&i2=%d", &i1, &i2); printf("%d+%d=%d", i1, i2, i1+i2);}使用VS2012編譯上面的代碼,編譯成功後,在工程目錄下的Debug檔案夾中會有一個exe檔案,將exe檔案修改成sum.cgi,並且複製到C:\Program Files\Apache Software Foundation\Apache2.2\cgi-bin中
最後在瀏覽器中輸入http://localhost/cgi-bin/sum.cgi?i1=12&i2=13
執行結果
程式執行個體8:遍在CGI中使用HTML
在記事本中輸入下面的HTML語言,並且以HTML格式儲存
<html><body> <form method=get action="http://localhost/cgi-bin/sum.cgi"> i1:<input type="text" name="i1"/> i2:<input type="text", name="i2"/> <input type="submit"/> </form></body></html>
將儲存好的HTML檔案放在C:\Program Files\Apache Software Foundation\Apache2.2\htdocs目錄下
在瀏覽器中輸入http://localhost/sum.html
執行結果:
計算11+12的結果
在輸入框中輸入11和12
單擊提交查詢內容後顯示了計算結果
開發基於Apache伺服器上的CGI程式