開發基於Apache伺服器上的CGI程式

來源:互聯網
上載者:User

標籤: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程式

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.