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

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

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

    jasmine214--love

    只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
    posts - 731, comments - 60, trackbacks - 0, articles - 0

    CGI程序的編寫

    Posted on 2010-07-28 16:47 幻海藍夢 閱讀(1280) 評論(0)  編輯  收藏 所屬分類: Linux

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

    CGI接口標準包括標準輸入、環境變量、標準輸出三部分。

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

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

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

    下面是CGI程序設計中常常要用到的一些環境變量。
      HTTP-REFERER:調用該CGI程序的網頁的URL。
      REMOTE-HOST:調用該CGI程序的Web瀏覽器的機器名和域名。
      REQUEST-METHOD:指的是當Web服務器傳遞數據給CGI程序時所采用的方法,分為GET和POST兩種方法。GET方法僅通過環境變量(如QUERY-STRING)傳遞數據給CGI程序,而POST方法通過環境變量和標準輸入傳遞數據給CGI程序,因此POST方法可較方便地傳遞較多的數據給CGI程序。

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

    CGI處理的C語言程序大概如下:

    n=atoi(getsenv("CONTENT_LENGTH"));??//獲取傳遞給程序的字節數
    ?if(n>5000000) n=5000000;
    ?buf=calloc(n+1, 1);
    ?if(buf==0) http_fatal("memory overflow");
    ?fread(buf, 1, n, stdin);????????????//從標準輸入讀取數據(post)
    ?buf[n]=0;
    ?t2=strtok(buf, "&");???????????????? //?的確是post,進行數據處理
    ?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);??//從環境變量里面獲取數據(get)
    ?t2=strtok(buf2, "&");????????????????????????????????????????????????????????? //的確是get,進行數據處理
    ?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

    主站蜘蛛池模板: 亚洲性无码av在线| 毛片免费视频播放| 亚洲精品视频免费看| 亚洲 自拍 另类小说综合图区| 亚洲 欧洲 自拍 另类 校园| 亚洲成A人片77777国产| 亚洲综合成人婷婷五月网址| 亚洲色婷婷综合开心网| 免费观看激色视频网站bd| 亚洲毛片基地日韩毛片基地| 日本人护士免费xxxx视频| a级成人毛片免费图片| 亚洲人成精品久久久久| 久久国产精品免费一区| 中文字幕亚洲综合小综合在线| 6080午夜一级毛片免费看6080夜福利| 亚洲乱亚洲乱妇无码| 日本二区免费一片黄2019| 在线涩涩免费观看国产精品| 亚洲中文无码永久免| 亚洲AV无码久久精品成人| 精品免费国产一区二区| 97在线视频免费播放| 一级做a爰黑人又硬又粗免费看51社区国产精品视 | 四虎影视精品永久免费网站| 国产精品免费一区二区三区四区| 国产成人亚洲精品狼色在线| 国产免费阿v精品视频网址| 亚洲精品无码专区| 亚洲视频一区在线观看| 99在线精品视频观看免费| 中文字幕视频免费在线观看| 亚洲天堂视频在线观看| 69视频在线观看高清免费| 国产激情久久久久影院老熟女免费| 日本亚洲色大成网站www久久| 亚洲欧洲日产国码久在线观看| 亚洲精品国产va在线观看蜜芽| 国产成年无码久久久免费| 日韩色视频一区二区三区亚洲 | 亚洲中文字幕无码久久综合网|