當前位置:編程學習大全網 - 源碼下載 - Redcap源代碼

Redcap源代碼

CGIC簡介

如何編寫CGIC應用程序

如何在CGIC生成圖片?

CGI調試功能:使用捕獲

Cgic函數參考

Cgic可變參考

Cgic結果編碼參考

Cgic快速索引

壹般UNIX系統都支持ANSIC,CGI可以通過添加相應的庫函數(以及相應的H文件)來實現。這裏我推薦壹個用於CGI編程的ANSIC庫:cgic。

Cgic是壹個C語言庫,用於生成基於CGI的WWW應用程序。它具有以下功能:

*解析數據。

*接收以兩種方式發送的數據:GET和PSOT。

*將表單中的不同字段連接成壹個連續的字符串。

*提供字符串、整數、浮點以及單選和多選功能,用於檢索表單數據。

*為數值字段提供邊界檢測

*將CGI環境變量加載到非空C字符串中。

*捕獲用於調試的CGI狀態。

*提供相對安全的系統調用功能。

cgic程序可以用通用的ANSI C或C++編譯器編譯,但與通用的C程序不同,用cgic編寫的源代碼的主要函數是cgiMain(),而不是通常的main()。cgic的庫會自動將cgiMain連接到相應的Main()。

-

編寫CGIC程序

註意:所有cgic應用程序必須連接到cgic.c .

用cgimain()替換main()必須包含:# include "cgic.h。"

基本結構cgictest.c:

int cgiMain() {

#如果調試

/*如果我們正在調試,加載壹個保存的CGI場景*/

CGI readenvironment("/path/to/cap CGI . dat ");

#endif

/*重要:我們必須指明文檔的類型*/

cgiHeaderContentType(" text/html ");

/*現在調用其他函數來處理表單的每個部分*/

fprintf(cgiOut," & ltHTML & gt& ltHEAD & gt\ n ");

fprintf(cgiOut," & ltTITLE & gtcgic測試<。/TITLE & gt;& lt/HEAD & gt;\n "):

fprintf(cgiOut," & ltBODY & gt& lth 1 & gt;cgic測試<。/h 1 & gt;\ n ");

name();

address();

餓();

溫度();

青蛙();

color();

口味();

none buttons();

單選按鈕();

fprintf(cgiOut," & lt/BODY & gt;& lt/HTML & gt;\ n ");

/*這個值將是程序的退出代碼;0

通常表示在Unix和DOS程序中成功*/

返回0;

}

捕獲

輸出標題

CgiHeaderContentType()在輸出文檔之前簡要描述了MIME內部類型,比如“text/html”。

CgiHeaderStatus()替換輸出錯誤代碼cgiHeaderLocation(),而不是重定向到其他頁面。獨立應用程序中只能有壹個cgiHeader函數。

重要提示:在cgiHeader函數組中,cgiHeaderContentType()在向瀏覽器輸出任何內容之前被調用。否則,將會出現錯誤或瀏覽器無法識別。cgiOut

然後,cgiMain()調用不同的函數。當函數完成時,它將返回0。

處理輸入文本

void Name() {

char name[81];

cgiformstringnewlines(" name ",名稱,81);

fprintf(cgiOut," Name:% s & lt;BR & gt\n ",名稱);

}

該函數的功能是檢索和顯示用戶輸入的名稱。

處理輸出

重要提示:cgiOut通常等同於stdout。

CgiFormString確保導航的暫停

處理單個復選框輸入

hungry()函數確定用戶是否選擇了復選框“Hungry”:

void Hungry() {

if(cgiformcheckbox single(" hungry ")= = cgiFormSuccess){

fprintf(cgiOut,“我餓了!& ltBR & gt\ n ");

}否則{

fprintf(cgiOut,“我不餓!& ltBR & gt\ n ");

}

}

該函數依賴cgiFormCheckboxSingle()來確定是否選中了壹個復選框。CgiFormCheckboxSingle()接受復選框名稱的屬性值,如果存在則返回cgiFormSuccess,否則返回cgiFormNotFound。如果有多個復選框,請使用cgiFormCheckboxMultiple()和cgiFormStringMultiple()的函數。

處理數字輸入

Temperature()返回浮點本的值,以確保它在特定的返回範圍內。

空隙溫度(){

雙溫;

cgiFormDoubleBounded("溫度",& amp溫度,80.0,120.0,98.6);

fprintf(cgiOut,"我的體溫是%f。BR & gt\n”,溫度);

}

通過cgiFormDoubleBounded()獲取數據。第壹個數據是返回數據中輸入字段的名稱。最後壹個值是用戶不提交時的默認值。

該函數總是在特定的返回中檢索適當的值;檢查cgiFormDoubleBounded返回的值,以確保用戶輸入的數據在指定的範圍內,而不是其他無效數據。請參閱有關cgiFormDoubleBounded()的更多信息。如果限制檢查不令人滿意,可以使用cgiFormDouble()來代替。

在整數輸入中,可以使用cgiFormInteger和cgiFormIntegerBounded。這些函數具有相似的功能。

處理單項選擇輸入

& lt選擇& gtHTML標簽用於為用戶提供多種選擇。對於單選按鈕和復選框椰子油,選擇的數量很少。顏色()。

char *colors[] = {

“紅色”,

“綠色”,

“藍色”

};

空心顏色(){

int顏色選擇;

cgiFormSelectSingle("colors ",顏色,3 & amp;colorChoice,0);

fprintf(cgiOut,"我是:% s & ltBR & gt\n ",colors[color choice]);

}

該功能確定用戶已經從以下選項中選擇了幾個選項

CgiFormSelectSingle()總是顯示合理的選項值。

單選按鈕也可以使用該功能。另外還有cgiFormRadio(),也是壹樣的。

處理多項選擇輸入

非按鈕()

char *votes[] = {

" A "

" B "

" C "

" D "

};

void none buttons(){

int voteChoices[4];

int I;

int結果;

int無效;

char * *響應;

/*方法#1:檢查有效投票。這是個好主意,

因為不存在的候選人的選票可能應該

被打折扣...*/

fprintf(cgiOut," Votes(方法1):& lt;BR & gt\ n ");

result = cgiformcheckbox multiple(" vote ",票數,4,

voteChoices & amp;無效);

if (result == cgiFormNotFound) {

fprintf(cgiOut,“我討厭他們所有人!& ltp & gt\ n ");

}否則{

fprintf(cgiOut,"我的首選候選項是:\ n ");

fprintf(cgiOut," & ltul & gt\ n ");

for(I = 0;(我& lt4);i++) {

if (voteChoices[i]) {

fprintf(cgiOut," & lt李& gt%s\n ",票數[I]);

}

}

fprintf(cgiOut," & lt/ul & gt;\ n ");

}

請參考cgiformCheckboxMultiple(),cgiformSelectMultiple()。

cgiformcheckbox multiple()cgiformcheckbox multiple

cgictest.c中使用了NonExButtons()函數:

/*方法2:獲得所有投票的名字,並信任他們。

如果表單會更頻繁地改變,這是很好的

那麽代碼和發明的反應就不會有危險

或者可以用其他方式檢查。*/

fprintf(cgiOut," Votes(方法2):& lt;BR & gt\ n ");

result = cgiFormStringMultiple(" vote ",& amp回復);

if (result == cgiFormNotFound) {

fprintf(cgiOut,“我討厭他們所有人!& ltp & gt\ n ");

}否則{

int I = 0;

fprintf(cgiOut,"我的首選候選項是:\ n ");

fprintf(cgiOut," & ltul & gt\ n ");

while (responses[i]) {

fprintf(cgiOut," & lt李& gt%s\n ",responses[I]);

i++;

}

fprintf(cgiOut," & lt/ul & gt;\ n ");

}

/*我們必須確保釋放字符串數組或內存

會發生泄漏。簡單地調用free()將釋放

數組而不是單個字符串。這

函數cgiStringArrayFree()完全完成了這項工作。*/

cgiStringArrayFree(響應);

}

請參考cgiFormStringMultiple()

cgiFormStringMultiple()

/*字符串數組;每個C字符串都是壹個字符數組*/

char * *響應;

cgiFormStringMultiple("vote ",& amp回復);

檢查CGI環境變量

這裏將使用的變量,

產生圖像

#包含“cgic.h”

#包含“gd.h”

char *colors[] = {

“紅色”、“綠色”、“藍色”

};

#定義顏色總計3

int cgiMain() {

int colorChosen

gdImagePtr im

int r,g,b;

/*使用gd創建圖像*/

im = gdImageCreate(64,64);

r = gdimagecolorlallocate(im,255,0,0);

g = gdimagecolorlallocate(im,0,255,0);

b = gdimagecolorlallocate(im,0,0,255);

/*現在使用cgic找出用戶要求的顏色*/

cgiFormSelectSingle("color ",3 & amp;colorChosen,0);

/*現在用想要的顏色填充*/

開關(顏色選擇){

案例0:

gdImageFill(im,32,32,r);

打破;

案例1:

gdImageFill(im,32,32,g);

打破;

案例二:

gdImageFill(im,32,32,b);

打破;

}

/*現在輸出圖像。註意內容類型!*/

cgiHeaderContentType(" image/gif ");

/*將圖像發送到cgiOut */

gdImageGif(im,CGI out);

/*釋放gd映像*/

gdImageDestroy(im);

返回0;

}

捕獲用於調試的CGI狀態

Cgic函數參考

cgiFormResultType cgiFormString(char * name,char *result,int max)

用於從輸入字段復制字符串。他將域名max-1字節中的字符復制到緩沖區結果中。如果域不存在,將壹個空字符串復制到結果緩沖區。在此函數中,所有新行都由換行符表示。

cgiFormResultType cgiFormStringNoNewlines(char * name,char *result,int max)

它類似於cgiFormString函數,只是刪除了所有的CR和LF。

cgiFormResultType cgiformstringspaceneed(char * name,int *length)

它返回指向name的字符串的長度,並將該長度放入length中。

cgiFormResultType cgiFormStringMultiple(char * name,char ***ptrToStringArray)

如果同壹個名字有多個輸入字段,或者字段中的字符串可以動態改變,那麽您可以使用這個函數。它將所有名為name的輸入字段的值放在prtToStringArray中。

void cgiStringArrayFree(char * * string array)

它釋放分配給stringArray的內存。

cgiFormResultType cgiFormInteger(char * name,int *result,int defaultV)

從輸入字段中取出壹個整數,放入結果中。

cgiFormResultType cgiFormIntegerBounded(char * name,int *result,int min,int max,int defaultV)

如果輸入字段中的整數在界限內,就取出來放到結果中。

cgiFormResultType cgiFormDouble(char * name,double *result,double defaultV)

從輸入字段中取出壹個浮點數,放入結果中。

cgiFormResultType cgiFormDoubleBounded(char * name,double *result,double min,double max,double defaultV)

如果輸入字段中的浮點數在界限內,就取出來放到結果中。

cgiFormResultType cgiFormSelectSingle(char * name,char * * choicesText,int choicesTotal,int *result,int defaultV)

去掉復選框(在select語句之後),將選中的名稱復制到choicesText,將選中的數字復制到choicesTotal,將當前選擇復制到result。

cgiFormResultType cgiFormSelectMultiple(char * name,char * * choicesText,int choicesTotal,int *result,int *invalid)

類似於cgiFormSelectSingle,只指向整數數組的結果表示選中的項目。

cgiFormResultType cgiformcheckbox single(char * name)

如果選中該復選框,該函數將返回cgiFormSuccess,否則將返回cgiFormNotFound。

cgiFormResultType cgiformcheckbox multiple(char * name,char **valuesText,int valuesTotal,int *result,int *invalid)

類似於cgiFormCheckboxSingle,但它處理同名的多個復選框的情況。名稱指向復選框的名稱;ValuesText指向包含每個復選框中的參數的數組;ValuesTotal指向復選框的總數;Result是壹個整數數組,每個復選框用1表示,未選中的用0表示。

cgiFormResultType cgiFormRadio(char * name,char **valuesText,int valuesTotal,int *result,int defaultV)

類似於cgiFormCheckboxMultiple,除了這裏是單選按鈕而不是復選框。

void cgiHeaderLocation(char * redirectUrl)

重定向到由redirectUrl指定的URL。

void cgiHeaderStatus(int status,char *statusMessage)

輸出狀態代碼狀態和消息狀態消息。

void cgiHeaderContentType(char * mime type)

用來告訴瀏覽器返回什麽類型的文檔。

cgiEnvironmentResultType CGI write environment(char * filename)

這個函數將當前的CGI環境寫入文件名文件,以便以後調試。

cgiEnvironmentResultType cgiread environment(char * filename)

這個函數從文件名文件中讀取CGI環境進行調試。

int cgiMain()

壹個程序必須寫這個函數,這是主程序開始的地方。

Cgic可變參考

本節提供了cgic提供的各種全局變量的參考指南,供程序員使用。這些變量應該總是優先於stdin、stdout和getenv()調用使用,以確保與cgic CGI調試特性的兼容性。

大部分變量等價於各種CGI變量,重要的是VGIC變量不能為空。

char *cgiServerSoftware

服務器軟件名稱、空字符串或未知的空字符串。

char *cgiServerName

返回服務器名稱或為空。

char *cgiGatewayInterface

網關接口(通常為CGI/1.1),或者為空。

char *cgiServerProtocol

網絡協議(通常為HTTP/1.0),或者為空。

char *cgiServerPort

服務器端口(通常為80),或者為空。

char *cgiRequestMethod

平時得到的還是帖子,還是空的。

char *cgiPathInfo

指示附加虛擬路徑

char *cgiPathTranslated

指出附加的虛擬路徑,並將其從服務器路徑更改為本地路徑。

char *cgiScriptName

調用程序的名稱

char *cgiQueryString

包括GET-method請求或者

char *cgiRemoteHost

從瀏覽器返回客戶端主機的名稱。

char *cgiRemoteAddr

從瀏覽器返回客戶的IP地址。

char *cgiAuthType

返回用戶授權信息

char *cgiRemoteUser

身份驗證用戶cgiAuthType。

char * cgiremotedintent

返回用戶名是不安全的(用戶與用戶有堅定的約定),尤其是在Windows系統中。

char *cgiContentType

返回MIME內部類型

char * cgiAccept

請參考cgiheadercontype () cgiuser代理。

char *cgiUserAgent

檢索到的用戶瀏覽器信息

char *cgiReferrer

指向用戶訪問的URL。

int cgiContentLength

表單或查詢數據的字節被認為是標準的。

文件*cgiOut

CGI輸出。cgiHeader函數和cgiHeaderContentType壹樣,首先用於輸出mime頭;用於fprintf()和fwrite()的cgiout通常等同於stdout。

文件*cgiIn

CGI輸入。大部分時間妳不會需要這個功能。

Cgic結果編碼參考

在大量的專欄中,cgic函數系統地產生合理的結果,即使在瀏覽器和用戶不合理的情況下。無論如何,有時候知道不合理的事情發生,特別是給出壹個值或者定義壹個範圍,是壹個不充分的解決方案。以下結果代碼有助於更好地理解。

cgiFormSuccess

信息提交成功。

cgiFormTruncated

刪除壹些字節。

cgiFormBadType

輸入信息不正確(不符合要求)

cgiFormEmpty

提交信息為空。

cgiFormNotFound

未找到提交信息。

cgiFormConstrained

數字屬於壹個特定的範圍,並被迫低於或高於適當的範圍。

cgiFormNoSuchChoice

不接受單項選擇提交的值。通常情況下,表和程序是有矛盾的。

環境問題

嘗試從CGI環境或獲取的文件中讀取或寫入失敗,並報告了I/O錯誤。

cgien環境內存

嘗試從CGI環境或獲取的文件中讀取或寫入失敗,並報告了內存不足錯誤。

cgienenvironmentsuccess

從CGI環境或獲取的文件中讀取或寫入的嘗試成功。

Cgic快速索引

  • 上一篇:在彩虹橋公交車站坐什麽公交車到壹德路
  • 下一篇:matlab2018simulink示波器如讀數
  • copyright 2024編程學習大全網