top
Loading...
簡明CGI教程
工作原理

CGI是服務器上運行的網關守護進程。根據客戶端在進行請求時所采用的方法,服務器負責收集由客戶端提供的信息,并根據客戶端請求的CGI腳本程序文件名,執行該腳本程序。所謂腳本程序就是該程序在CGI控制下運行程序。CGI腳本程序啟動后,服務器將客戶端的信息傳給此程序,該程序對客戶的信息處理后,將運行結果交
給服務器,由服務器負責再向客戶端傳遞。
CGI腳本是用下列兩種方法使用的:
1、作為一個表單的ACTION
2、作為一個頁中的直接link。

這有個簡短的工作示意:
1、一個URL指向一個CGI腳本. 一個CGI腳本的URL能如普通的URL一樣在任何地方出現。
2、服務器接收請求, 按照那個URL指向的腳本文件(注意文件的位置和擴展名),執行腳本。
3、腳本執行基于輸入數據的操作,包括查詢數據庫、計算數值或調用系統中其他程序。腳本產生某種Web服務器能理解的輸出結果。
4、服務器接收來自腳本的輸出并且把它傳回瀏覽器,讓用戶了解結果。

一個指向CGI腳本的連接,它的HTML是這樣的:
<A HREF="http://linux.cgi.com.cn/~zzy71616/cgi-bin/getdate.cgi">Display the Date</A>
說明是個CGI腳本是因為這里面有個cgi-bin的路徑。在許多服務器cgi-bin是僅能夠放置CGI腳本的目錄。當你選擇這個連接時, 你的
瀏覽器將向:linux.cgi.com.cn服務器提出請求。服務器接收這個請求計算出URL處的腳本文件名然后執行這個腳本.

環境變量

CGI腳本程序運行時,服務器使用環境變量和標準輸入、標準輸出與腳本程序進行信息交換。
下表顯示常用環境變量:


類型 變量 含義
服務器信息 SERVER_SOFTWARE 服務器軟件名稱及版本
SERVER_NAME 服務器名稱
GATEWAY_INTERFACE CGI名稱及版本
SERVER_PROTOCAL 服務器傳輸協議名稱及版本
SERVER_PORT 服務器連接的端口
REMOTE_HOST 客戶機域名
客戶機信息 REMOTE_IP 客戶機IP地址
REMOTE_USER 獲得訪問者使用HTML的輸入密碼
REMOTE_IDENT 獲得訪問者登錄服務器的輸入密碼
腳本信息 REQUEST_METHOD 客戶端請求的方法
PATH_INFO 客戶端請求的CGI的路徑
PATH_TRANSLATED 客戶端請求的CGI的全路徑信息
SCRIPT_NAME 客戶端請求的CGI名稱
QUERY_STRING 請求中的查詢信息
CONTENT_LENGTH 用戶信息長度
DOCUMENT_URI 請求文檔的路徑和名稱


腳本放置
你的腳本必須放在有執行權限的目錄中。

如果你的服務器是UNIX:
確定你的腳本是可執行的方法為:
用chmod +x 你的腳本.cgi或:chmod 755 你的腳本.cgi
如果你的服務器是PERSON WEB或WINDOWS NT:
把你的腳本必須放在可執行目錄中。

如果客戶端是win95,使用遠程服務器,可以用telnet登陸你的服務器,執行命令行,當然必須了解UNIX命令。
如果客戶端是win95,使用內部網WINDONS NT或 PEER WEB 的服務器,執行CGI程序與其他程序差不多。


在實際中,一般免費網域均不提供執行目錄,所以要制作CGI程序,就有必要尋找一個提供CGI存放服務的免費網域。如:
重慶太陽城
聯訊


Web服務器設置

如果你既不想登陸到遠程服務器,有沒有內聯網的服務器,那你要調試CGI程序就必須設置個人的Web服務器。

1、 首先,要為計算機設置TCP/IP協議
在“控制面板”的“網絡”中添加TCP/IP協議,然后在“TCP/IP屬性”中的“IP地址”標簽中選擇指定IP地址”并輸入任意一個正確的IP地址。在“DNS配置”標簽中選擇“使DNS無效”。當然,
也可以不指定IP地址,那么在以后就只能通過機器名稱來識別web服務器了(http://yomachine,機器名稱可以在“控制面板”,“網絡”中查出)

2、安裝個人Web服務器,方法如下:
(1) 在“控制面板”的“網絡”的“配置”標簽中單擊“添加”按鈕;
(2) 在彈出的“選擇網絡組件類型”對話框中,選擇“服務”在“廠商”欄中選擇“Microsoft”,在“網絡服務”欄中選擇“PersonalWeb Server”,然后單擊“確定”按鈕。這時Windows 95將自動安裝Personal Web Server。
(3) 安裝完成后,“控制面板”中會出現“個人Web服務器”圖標,雙擊圖標即可以對自己的個人Web服務器做設置了


3、設置CGI程序的運行目錄
在“控制面板”中雙擊“個人Web服務器”圖標,選擇“管理”標簽下的“管理”按鈕,這時Personal Web Server會自動啟動你的瀏覽器,并要求連接,連接成功后,顯示Internet 服務管理頁面。選擇“WWW管理”,選擇“目錄”,選擇“ADD”,在WWW服務器中加入你的CGI-BIN目錄,然后,一定不要忘了,要把它設為可執行。同時,建議你把它虛擬為"cgi-bin"目錄,這樣在你的HTML里面你就可以用"/cgi-bin/???.cgi"來調用CGI程序了全部設置好之后,可以在瀏覽器中打“http://你的機器名稱”或者“http://你的機器的IP”來檢驗一下你的設置。


一個C編寫的CGI例子

一、編輯test.c

#include<stdio.h>
#include<stdlib.h>
#include<windows.h>

void PrintMimeHead(){
printf("Content-type:text/htmln");
printf("Progma:no-cachen");
printf("n");
}

void PrintHtmlHead(){
printf("<html>n");
printf("<head></head>n");
printf("<body>n");
printf("<h1>hello!</h1>n");
}

void PrintHtmlTailer(){
printf("</body>n");
printf("</html>n");
}

void PrintForm(){
printf("<form method=POST action="%s">n",getenv("SCRIPT_NAME"));
printf("your name:<input type=text name=name size=20><br>n");
printf("your email:<input type=text name=mail size=30><br>n");
printf("<input type=submit value="ok"><br>n");
printf("</form>");
}

void ProcessDate(){
int i,x;
int len;
char input_date[1000]="";
char *StringLen;
StringLen=getenv("CONTENT_LENGTH");
if(StringLen!=Null)
len=atoi(StringLen);
else len=0;

for(i=0;i<len;i++)
{x=fgetc(stdin);
if(x==EOF) break;
input_data[i]=x;
}

printf("you enter:%sn",input_data);
}



void main(){
char *pRequestMethod;
setvbuf(stdout,NULL,_IONBF,0);

pRequestMethod=getenv("REQUEST_METHOD");
if (pRequestMethod==NULL)
{printf("no form run!");}
else if(stricmp(pRequestMethod,"get")==0){
PrintMimeHead();
PrintHtmlHead();
PrintForm();
PrintHtmlTailer();
}
else if(stricmp(pRequestMethod,"post")==0){
PrintMimeHead();
PrintHtmlHead();
ProcessDate();
PrintForm();
PrintHtmlTailer();
}
else{
PrintMimeHead();
PrintHtmlHead();
printf("no Method!");
PrintHtmlTailer();
}

fflush(stdout);
}

二、編譯TEST.C
三、存放到服務器默認CGI目錄中
四、編輯HTML調用TEXT.EXE,即可。

一個PERL編寫的CGI例子

為了讓在Win95上調好的CGI程序在其他的操作系統上都能使用,我們選擇Perl作為CGI編程語言Perl是一個很好用的CGI編程語言,與其它的編程語言相比較,它具有在Unix、WinNT、Win95、Dos、Linux、FreeBSD、OS2、Macitosh等操作系統上都能使用的優點

要在自己的Win95上調試Perl CGI程序,需要做兩件事情:
1、設置Web服務器
2、安裝Perlfor Win32
在自己的Win95上調試準跨平臺的CGI程序
安裝Perl for Win32

要在Windows 95上使用Perl來執行CGI程序,還要再安裝Perl for Win32 系統Perl for Win32 在perl32可以下載下載了109-i86.zip并解壓到某一個盤上后,運行Perl目錄下的install.bat,

系統會分別提問:
1.Do you wish to proceed? Y
2.Modify search path? Y
3.continue to install perlIS.dll? Y
4.please choose a file extension to associate with PerlIS.dll
Extension: 按你的情況,鍵入CGI程序后綴“pl”或者“cgi”
這時,按我們的實驗,應該是已經可以運行CGI程序的了,可以用記事本寫一個簡單的CGI腳本試一試。用記事本新建一個文件,然后把下面的代碼Copy進去,再將它保存為CGI-BIN目錄下的test.cgi或者test.pl(視安裝過程中你對第四個問題的回答而定)

#!/usr/bin/perl
print "Content-type:text/htmlnn";
print"恭喜!CGI程序運行成功了!"


把這個文件放在你自己的可執行的cgi-bin目錄中。
然后新建一個名稱為test.htm的HTML文件,放在你的某一個WWW目錄中。其內容如下:
<html>
<body>
<a href="http://你的機器名稱/cgi-bin/test.cgi">測試CGI(.cgi后綴)</a>
<body>
</html>


接下來運行測試。打開瀏覽器,在地址欄中鍵入“http:// 你的Web服務器名/www目錄/test.htm”,會出現一個聯接,按下這個聯接,就可以查看CGI程序的運行結果。失敗的情況有成千上萬種,但是成功的結果只有一個,就是在屏幕上出現了“恭喜!CGI程序運
行成功了!”。當然,因為win系統不能正確判斷輸出類型的原因,“恭喜”前面也許還會有一行“Content-type:text/html”。這個不要緊,當你在其它操作系統上用這個CGI程序時,它會消失的!
當然,也可以從網上的另一臺計算機來測試,只需要在一個健康的TCP/IP網絡上輸入正確的URL就行。如果CGI程序還不行,你需要修改Windows 95的注冊表了。方法是先運行注冊表編輯器regedit,然后依次打開“HKEY_LOCAL_MACHINESystemCurrentcontrlsetServicesW3svcParametersScriptMap”,

加入“.pl ‘C:PERLBINperl.exe%s %s’”
(或者.cgi......)。
退出注冊表文件后,重新啟動計算機,然后進入CGI-BIN目錄下,從中任選一個擴展名為.pl或者.cgi的程序文件并雙擊,這時系統會出現一個列表窗口,詢問使用什么程序來打開這種文件,在文件列表中找到“perl”(如果找不到可以在“其他”項中按路徑來指定),并選定“始終使用該軟件打開這種類型的文件”項,單擊“確定”即可。

Windows NT Server 4.0中的Web 服務功能通過NT自帶的IIS(Internet InformationServer) 來實 現。在Windows NT Server 4.0 中Perl for win32的安裝過程與Windows95基本一樣,只是修改注冊表時應加入的內容為:
“.pl:REG_SZ:C:PerlBinperl.exe%s %s”。
北斗有巢氏 有巢氏北斗