<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    jasmine214--love

    只有當(dāng)你的內(nèi)心總是充滿快樂(lè)、美好的愿望和寧?kù)o時(shí),你才能擁有強(qiáng)壯的體魄和明朗、快樂(lè)或者寧?kù)o的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    CGI程序的編寫

    Posted on 2010-07-28 16:47 幻海藍(lán)夢(mèng) 閱讀(1279) 評(píng)論(0)  編輯  收藏 所屬分類: Linux

    原文:http://blog.donews.com/mutecat/archive/2006/10/28/1068602.aspx
    其實(shí)大一的時(shí)候就開(kāi)始接觸CGI了,CGI(Common Gateway Interface: 公用網(wǎng)關(guān)接口)規(guī)定了Web服務(wù)器調(diào)用其他可執(zhí)行程序(CGI程序)的接口協(xié)議標(biāo)準(zhǔn),由此可見(jiàn),CGI程序需要httpd服務(wù)器的支持。Linux下比較流行用perl和php來(lái)寫CGI程序,CGI程序需要大量的字符處理工作,perl和php對(duì)字符的處理都非常簡(jiǎn)單。但是有時(shí)也用C語(yǔ)言或者其他一些語(yǔ)言來(lái)寫,C語(yǔ)言寫CGI相對(duì)比較復(fù)雜,大家知道C對(duì)字符串的處理是相當(dāng)復(fù)雜的,但是用C語(yǔ)言編寫的CGI程序具有執(zhí)行速度快、安全性高等特點(diǎn)。

    CGI接口標(biāo)準(zhǔn)包括標(biāo)準(zhǔn)輸入、環(huán)境變量、標(biāo)準(zhǔn)輸出三部分。

    綠體部分摘自http://www.7dspace.com/doc/19/2005-08-17/200581702512452703.htm

    1.標(biāo)準(zhǔn)輸入
      CGI程序像其他可執(zhí)行程序一樣,可通過(guò)標(biāo)準(zhǔn)輸入(stdin)從Web服務(wù)器得到輸入信息,如Form中的數(shù)據(jù),這就是所謂的向CGI程序傳遞數(shù)據(jù)的POST方法。這意味著在操作系統(tǒng)命令行狀態(tài)可執(zhí)行CGI程序,對(duì)CGI程序進(jìn)行調(diào)試。
    2.環(huán)境變量
    ?????? 操作系統(tǒng)提供了許多環(huán)境變量,它們定義了程序的執(zhí)行環(huán)境,應(yīng)用程序可以存取它們。Web服務(wù)器和CGI接口又另外設(shè)置了自己的一些環(huán)境變量,用來(lái)向CGI程序傳遞一些重要的參數(shù)。CGI的GET方法還通過(guò) 環(huán)境變量QUERY-STRING向CGI程序傳遞Form中的數(shù)據(jù)。
    3.標(biāo)準(zhǔn)輸出
      CGI程序通過(guò)標(biāo)準(zhǔn)輸出(stdout)將輸出信息傳送給Web服務(wù)器。傳送給Web服務(wù)器的信息可以用各種格式,通常是以純文本或者HTML文本的形式,這樣我們就可以在命令行狀態(tài)調(diào)試CGI程序,并且得到它們的輸出。

    從上面可以看出CGI獲取input的方法有兩種:環(huán)境變量(get),讀stdin(post)

    下面是CGI程序設(shè)計(jì)中常常要用到的一些環(huán)境變量。
      HTTP-REFERER:調(diào)用該CGI程序的網(wǎng)頁(yè)的URL。
      REMOTE-HOST:調(diào)用該CGI程序的Web瀏覽器的機(jī)器名和域名。
      REQUEST-METHOD:指的是當(dāng)Web服務(wù)器傳遞數(shù)據(jù)給CGI程序時(shí)所采用的方法,分為GET和POST兩種方法。GET方法僅通過(guò)環(huán)境變量(如QUERY-STRING)傳遞數(shù)據(jù)給CGI程序,而POST方法通過(guò)環(huán)境變量和標(biāo)準(zhǔn)輸入傳遞數(shù)據(jù)給CGI程序,因此POST方法可較方便地傳遞較多的數(shù)據(jù)給CGI程序。

      SCRIPT-NAME:該CGI程序的名稱。
      QUERY-STRING:當(dāng)使用GET方法時(shí),Form中的數(shù)據(jù)最后放在QUERY-STRING中,傳遞給CGI程序。
      CONTENT-TYPE:傳遞給CGI程序數(shù)據(jù)的MIME類型,通常為″applica tion/x-www-form-url encodede″,它是從HTML Form中以POST方法傳遞數(shù)據(jù)給CGI程序的數(shù)據(jù)編碼類型,稱為URL編碼類型。
      CONTENT-LENGTH:傳遞給CGI程序的數(shù)據(jù)字符數(shù)(字節(jié)數(shù))。

    CGI處理的C語(yǔ)言程序大概如下:

    n=atoi(getsenv("CONTENT_LENGTH"));??//獲取傳遞給程序的字節(jié)數(shù)
    ?if(n>5000000) n=5000000;
    ?buf=calloc(n+1, 1);
    ?if(buf==0) http_fatal("memory overflow");
    ?fread(buf, 1, n, stdin);????????????//從標(biāo)準(zhǔn)輸入讀取數(shù)據(jù)(post)
    ?buf[n]=0;
    ?t2=strtok(buf, "&");???????????????? //?的確是post,進(jìn)行數(shù)據(jù)處理
    ?while(t2) {
    ??t3=strchr(t2, ‘=’);
    ??if(t3!=0) {
    ???t3[0]=0;
    ???t3++;
    ???__unhcode(t3);
    ???parm_add(trim(t2), t3);
    ??}
    ??t2=strtok(0, "&");
    ?}
    ?strsncpy(buf2, getsenv("QUERY_STRING"), 1024);??//從環(huán)境變量里面獲取數(shù)據(jù)(get)
    ?t2=strtok(buf2, "&");????????????????????????????????????????????????????????? //的確是get,進(jìn)行數(shù)據(jù)處理
    ?while(t2) {
    ??t3=strchr(t2, ‘=’);
    ??if(t3!=0) {
    ???t3[0]=0;
    ???t3++;
    ???__unhcode(t3);
    ???parm_add(trim(t2), t3);
    ??}
    ??t2=strtok(0, "&");
    ?}

    參考文檔:

    http://ind.ntou.edu.tw/~dada/cgi/CGIprog.htm

    http://www.7dspace.com/doc/19/2005-08-17/200581702512452703.htm

    主站蜘蛛池模板: 在线看片韩国免费人成视频| 91成人在线免费视频| 国产婷婷高清在线观看免费| 亚洲欧洲免费无码| 亚洲精品国产成人99久久| 亚洲美女免费视频| 99亚偷拍自图区亚洲| 免费国产美女爽到喷出水来视频| www成人免费视频| 亚洲精品国产suv一区88| 亚洲小说图片视频| 在线观看免费国产视频| 中文字幕免费播放| 免费精品国自产拍在线播放| 亚洲人成人网站18禁| 亚洲一区在线视频观看| 亚洲精品美女在线观看播放| 日本免费网站在线观看| 久久精品网站免费观看| 美女被cao免费看在线看网站| 三级片免费观看久久| 亚洲精品免费在线视频| 久久久影院亚洲精品| 亚洲人成网77777亚洲色| 国产亚洲av片在线观看18女人| 亚洲高清偷拍一区二区三区| 免费高清国产视频| 亚洲a∨无码精品色午夜| 亚洲日韩看片无码电影| 亚洲色欲色欱wwW在线| 亚洲色精品三区二区一区| 亚洲熟女乱色一区二区三区| 亚洲一线产区二线产区区| 亚洲人成网站色7799| 一区二区亚洲精品精华液| 亚洲中文字幕无码中文| 亚洲欧美黑人猛交群| 337p日本欧洲亚洲大胆人人| 亚洲天堂一区二区| 亚洲神级电影国语版| 亚洲一区二区三区在线|