基於windows IIS的C語言CGI WEB服務器環境搭建

 網頁編程對我來講特別親切,由於我就是從html、ASP、PHP一步步接觸編程的。本身的編程愛好也是從那裏一點一點被知足。不過離開大學以後好久沒有碰過WEB了,最近看到嵌入式中的涉及到的web服務器,瞭解到了CGI編程,就想趕忙試一試。對於cgi,不算接觸,可是仍是據說過以前,對於純粹寫普通網站的人來講CGI倒是很古老的東西了,以前在大學的時候學校的ftp搜索引擎,是一位特別牛b的學長寫的,用的就是C實現CGI。後來我也想作一個,可是因爲水平有限,後來也就不了了之。前幾天在南圖想找本關於CGI方面的書居然都下架了,在網上搜索關於這方面的文章頁不多,且不少是針對perl語言的,因此這裏針對C語言的CGI寫點東西。html

        嵌入式中的WEB服務器,因爲嵌入式中主要是用C語言來實現,因此這裏只談C語言的CGI,而在嵌入式中的WEB服務器,你們通常選用BOA等,這裏爲何選用IIS,主要是由於咱們大部分人都是在windows下開發,因此在iis下調試天然是更方便一些。在網上看到不少人在問iis下配置關於C語言的CGI的方法,而網上的所有都是關於Perl的。我通過了兩天的時間在網上一遍一遍的百度和摸索,終於試出來基於windows xp的IIS5.1和windows 7的IIS6.1上的CGI配置方法。ios

 

綜述: 關於腳本和可執行程序web

        在iis中對於動態語言會設計到腳本和可執行程序。對於腳本是須要另外的程序對其進行解釋的,例如perl腳本編寫的CGI就是腳本,須要安裝專門的程序區解釋;而對於可執行程序,例如C語言編寫的.cgi(是c語言編譯出來的.exe程序,將擴展名exe改爲cgi),其自己就是可執行程序,不須要另外的程序去解釋,因此網上關於使用TC仍是VC的編譯器cl.exe做爲可執行程序去配置c語言編寫出來的cgi的說法都是錯誤的。其實CGI的實現就是將自己腳本或者可執行程序的標準輸出,再也不是經過屏幕打印,而是通過瀏覽器輸出給客戶端顯示,因此你用一個vc或者tc的編譯器去執行一個.exe的可執行文件是得不到想要的輸出的。正確的做法是不須要和perl語言同樣配置解釋程序,而是配置爲讓文件執行。apache

具體操做:編程

因爲網上針對IIS 和C語言的CGI的內容較少,因此下面的內容一步步用圖片說明。方便向我同樣的初次使用者。windows

1.編寫CGI程序。瀏覽器

使用任何一種C語言開發工具,TC,VC,C-free都可,C/C++都可。內容咱們仍是使用經典的hello world。安全

 

[cpp]  view plain copy print ?
 
  1. /****************************  hello.cpp  
[cpp]  view plain copy print ?
 
  1. 使用C++實現的CGI輸出hello world!   
[cpp]  view plain copy print ?
 
  1. by kikilizhm  
  2. *****************************/  
  3. #include <iostream.h>  
  4. void main()  
  5. {  
  6.     cout<<"Content-type:text/html\n\n"<<endl;  /* 注意這裏必定要按照這種格式,表示http頭以供瀏覽器識別,後面的\n\n是http中要求的頭和後面的內容必須空一格,                                                  並且必須使用反斜槓,不能使用" /n/n " ,這樣會報錯的,沒法識別。 */  
  7.     cout<<"Hello World!"<<endl;  
  8. }  

 

 

 

[cpp]  view plain copy print ?
 
  1. /********************************hello.c*************** 
  2. 使用C語言實現的CGI輸出加粗的hello world!  
  3. by kikilizhm 
  4. ******************************************************/  
  5. #include <stdio.h>  
  6. int main()  
  7. {  
  8.     printf("Content-type:text/html");  
  9.     printf("\n\n");  
  10.     printf("<b>Hello World!</b>");  
  11. }  


上面分別是使用C++和C語言編寫的hello world 例程,根據我的習慣,而後編譯生成 hello.exe 可執行文件,將擴展名exe改成cgi,變爲hello.cgi。服務器

如今咱們的cgi程序就寫好了,下面咱們開始配置iis,看看效果。工具

2.針對windows xp  的IIS5.1的配置。其實配置很簡單,只要你們看明白其中的根本。

    說明:這裏默認IIS已經安裝好可用(具體安裝IIS的方法能夠百度一下,這裏不細說),針對iis5.1咱們須要的只是配置一下腳本和可執行文件的執行權限便可。

按照上面說的,exe文件不須要解釋程序,直接執行便可。假設咱們網站根目錄是www,下www\cgi目錄爲腳本存放目錄,咱們把hello.cgi文件放到cgi目錄下,這裏爲演示方便,正常狀況下考慮安全等因素,常將存放腳本的目錄使用虛擬目錄掛接,不直接放在網站根目錄下。

 

而後咱們在IIS中右擊cgi目錄,選擇屬性,打開cgi屬性對話框,在目錄選項卡設置讀取、寫入、目錄訪問前的勾去掉。其中讀取是防止在訪問cgi程序時,瀏覽器將cgi文件做爲下載文件彈出下載對話框,而不是實際執行顯示在瀏覽器上。寫入和目錄訪問時安全須要。這裏特別注意去掉讀取權限。

而後將下方的 」執行權限「更改成 」腳本和可執行文件「 ,這裏也是重要的一步,不能夠用純腳本,必定要有可執行文件權限。點擊確認再確認,重啓IIS便可。

走到這裏咱們打開瀏覽器,輸入 http://localhost/cgi/hello.cgi ,便可看到hello world的畫面,若是還看不到或者出現其餘提示錯誤,通常爲網站的訪問權限認證設置有問題,能夠嘗試修改文件夾訪問權限。

 

 

**************************** ==針對win 7 的IIS6.1的配置== *****************************

3.win7中的IIS界面和windows xp 中的IIS5.1界面發生了很大的變化,IIS 6.1中已經內置有CGI處理模塊,這裏咱們直接使用便可。

一樣這裏咱們假設咱們IIS6.1已經安裝好,並且可使用,新建網站名稱:cgi-test,根目錄爲www,下面有子目錄cgi用於存放cgi腳本文件。

在左側的cgi-test網站中,咱們單擊cgi-test網站的cgi目錄,右側會顯示cgi主頁,咱們在右側 IIS 部分雙擊模塊,進入模塊功能,能夠看到CgiModule模塊,咱們接下來就是要使用的這個模塊來實現咱們的cgi功能。

                 

看到這裏,咱們返回cgi目錄的主頁,雙擊CGI主頁中的」處理程序映射「來配置 cgi文件的映射,在處理程序映射界面,每一條配置的路徑至關於配置的文件擴展名,

狀態爲已啓用或者禁用,處理程序即相應的模塊或者腳本解釋程序。 在最右側的操做界面,咱們能夠看到咱們能夠選擇的操做,其中包括 添加託管處理程序、添加腳本映射、添加通配符腳本映射,添加模塊映射,和下面的編輯功能權限等。這裏咱們使用的是添加模塊映射和編輯功能權限。

單擊添加模塊映射,在出現的編譯模塊映射對話框中,按照如圖所示配置,請求路徑輸入 *.cgi ,表示cgi格式文件,模塊選擇CgiModule,可執行文件爲空,名稱能夠隨便寫,這裏爲cgi-exe。肯定後,增長了cgi-exe配置,而後右擊這條配置選擇編譯功能權限,確保有執行權限,而後重啓iis服務。在瀏覽器中輸入地址,便可查看到hello world的打印。

 

看看咱們的成果吧,這裏只是打印了最簡單的字符,服務器已經配置好了,你們能夠發揮本身的聰明才智,實現本身的功能吧~ 

 

總結:

通過大概兩天的時間,終於摸索出了在iis上配置C語言編寫的CGI的方法,其實真正配置下來,花的時間並很少也不復雜,可是因爲網上不多人使用iis作C的cgi的服務器,並且網上關於這類問題的回答都是答非所問,甚至是錯誤的說法,因此摸索起來很困難,可是這兩天的時間裏,在經歷了從最初的沒有頭緒,到最後的思考網上不少人在說的perl語言的cgi和c語言的cgi的區別,去甄別那些錯誤的信息,而且從那些錯誤的信息裏找出來對我又幫助的地方,好比剛開始的時候使用vc的編譯器cl.exe去執行,並無獲得想要的結果,因而去嘗試vc的bin目錄下的其餘程序,在有的程序返回了一部分字符的時候,在瀏覽器的錯誤信息裏顯示了錯誤的http頭,比以前的空的頭仍是有點幫助,畢竟有了顯示,雖然是個錯誤信息。而後嘗試着用cmd.exe去執行,最後的最後確信不適用程序去執行,後面會出現訪問cgi的時候出現下載的問題,用文本方式打開下載的文件,雖然也是和服務器端同樣的名稱,可是下載的文件內容已是個文本,裏面就是執行打印出來的信息,只是它被下載下來了,而不是在瀏覽器中顯示,後來在網上看到了一個朋友發的msdn社區上的說明,須要去掉讀取權限,這才恍然大悟。而後就看到了親切的打印信息了。

即便一個一開始不明白或者沒有涉及到的問題,不斷的去想解決它,即便沒有進展,可是對於你對問題的理解仍是有很大幫助的,我想這和那種作夢發現苯環之類的是同樣的道理。同時也是一種學習的方式,對於一種技術一會兒接受不了的時候,能夠先看一部分,瞭解一下,或者強迫本身先學,而後放置一段時間,再回頭在學,就會發現很輕鬆了。

該睡覺了,但願這裏能對你們起到幫助做用,另外,在使用的過程當中,推薦你們使用合適的環境,好比在apache中配置cgi更加的簡單和安全。針對IIS上的C語言的CGI主要是針對你們在調試過程當中使用。

出處:http://blog.csdn.net/kikilizhm/article/details/7840719

相關文章
相關標籤/搜索