如何在Win32下建立apache,perl運(yùn)行環(huán)境
發(fā)布時(shí)間:2008-08-06 閱讀數(shù): 次 來源:網(wǎng)樂原科技
本文將談?wù)摰腤indows98SE下的apache和perl。
涉及的內(nèi)容有Windows98SE下的apache和perl的安裝,以及確認(rèn)他們正在正常工作。
如果你已經(jīng)是apache和perl的使用者并且對Windows98SE下的apache和perl不感興趣,
請您跳過本文。
本文中提到的一些方法,已經(jīng)在我的機(jī)器上通過了驗(yàn)證,但是不排除在其他系統(tǒng)上不能正
常工作的可能.
和你一樣我也是一個(gè)Perl的初學(xué)者,一個(gè)非常偶然的機(jī)會讓我開始關(guān)注Perl。
就在上個(gè)月我開始寫一個(gè)很小的像留言板一樣的東西,上面有每個(gè)人的名字和
屬于他的一行留言。我們有過一個(gè)VB寫的類似C/S結(jié)構(gòu)的東西,不過他太慢了,
和其他的東西也格格不入。我開始考慮使用現(xiàn)有的IIS Server和ASP來寫。
我咨詢了身邊的懂ASP的朋友,他們給了我很多建議,包括使用Access數(shù)據(jù)庫。
我想我要的是一個(gè)簡單東西,只不過把是讓人們把自己想寫的話放在那上面,
就像公司門口的留言白板一樣。就這樣我開始尋找有關(guān)CGI信息。
====================================================================
CGI代表通用網(wǎng)關(guān)接口(Common Gateway Interface)。
本質(zhì)上,CGI是運(yùn)行在服務(wù)器上的程序。它可以用任何語言編寫 - 只要能夠在
你的服務(wù)器上運(yùn)行.
====================================================================
這太好了,我可以使用我熟悉的語言和我熟悉的系統(tǒng)平臺。我想我只要寫一個(gè)
Win32的可執(zhí)行程序,放到IIS的某一個(gè)目錄下就可以了。似乎遠(yuǎn)遠(yuǎn)要比這復(fù)雜,
他們告訴我用UNIX和Apache,我的感覺好像大家都認(rèn)為CGI不是屬于Windows系統(tǒng)
的,而是屬于Unix Linux的。
在這以后的兩天我找到了Apache的Win32版本,我非常高興,我想我又可以在我
熟悉的系統(tǒng)上用我熟悉的語言寫東西了。
我想你可以在http://www.apache.org/ 找到它的最新版本。
也可以在http://httpd.apache.org/dist/binaries/win32/ 找到WIN32上可運(yùn)行的
最新版本。
我使用的是
http://httpd.apache.org/dist/binaries/win32/apache_1_3_12_win32.exe
這是一個(gè)和其他Windows應(yīng)用程序的安裝程序類似的安裝程序,沒有什么特別的地方
唯一需要注意的是在選擇安裝路徑的時(shí)候應(yīng)該選一個(gè)短一點(diǎn)的路徑,比如C:\apache。
這僅僅是為了放便,和你選擇一個(gè)長的路徑并沒有其他的不同。
Apache的安裝非常簡單,在安裝完之后我做了唯一的一個(gè)關(guān)于配置文件的修改
\Apache\conf\httpd.conf文件中的
#ServerName new.host.name行改成ServerName matrix
你可以用你喜歡的名字,我用的是matrix
現(xiàn)在就可以使用Apache了.
在你的IE里輸入http://matrix 看到內(nèi)容了嗎? 如果沒有你可以看一看Apache\htdocs
目錄,把index.html.en改成index.html.en. 如果還是看不到試一試用你的IP地址
像192.12.199.123或者是用http://loaclhost. 再不行我就沒辦法了.
用你喜歡的語言編寫CGI程序
像上面提到的CGI程序只是一個(gè)可以在你的HTTP SERVER上運(yùn)行的程序,基本上你可以用
任何的一種編程語言編寫.我使用C寫了第一個(gè)程序.
int main(int argc, char* argv[],char *envp[] )
{
printf("Content-type: text/html\n\n");
printf("HELLO");
}
把這5句話編譯成一個(gè)EXE文件(假設(shè)是HELLO.EXE),在Windows里雙擊這個(gè)文件,應(yīng)該會打
開
一個(gè)DOS窗口并且輸出兩句文本,像這樣
Content-type: text/html
HELLO
把HELLO.EXE拷貝到Apache/cgi-bin下,然后用IE訪問
http://loaclhost/cgi-bin/hello.exe
你的IE里應(yīng)該出現(xiàn)HELLO. 再把HELLO.EXE改成HELLO.CGI試一試.
簡單吧,下面是復(fù)雜一點(diǎn)的.
當(dāng)使用個(gè)GET POST方法時(shí)如何接受參數(shù)?
這和你使用的SERVER有關(guān),當(dāng)你用Apache for win32時(shí),GET方法的參數(shù)可以從輸入變量
argv或者環(huán)境變量里取得.
POST方法需要讀取標(biāo)準(zhǔn)輸入設(shè)備.
int main(int argc, char* argv[],char *envp[] )
{
printf("Content-type: text/html\n\n");
for( i = 0; envp[i] != NULL; ++i )
{
printf(envp[i]);
printf("<br>");
}
}
這段程序可以顯示全部的環(huán)境變量內(nèi)容,像上面一樣拷到cgi-bin里用IE看一看.
讀取標(biāo)準(zhǔn)輸入設(shè)備: scanf("%s",&buf);像讀鍵盤一樣.當(dāng)然你應(yīng)該先檢查一下環(huán)境變量
CONTENT_LENGTH取得正確的參數(shù)長度.
你得到的參數(shù)有一些是被編碼的像這樣
http://loaclhost/cgi-bin/hello.exe?name=%B7%C5%BA%32%65
編碼方法是%加上兩位十六進(jìn)制數(shù).兩位十六進(jìn)制數(shù)是字符的ASCII碼.不得不編一段代碼
用于解碼.
這是C編CGI很不方便的地方,如果是Perl就簡單了.
C語言
BOOL DeCode(LPTSTR lpStr)
{
int Length = strlen(lpStr);
if (Length==0){
*lpStr=0;
return true;
}
char *pStr = new char[Length+1];
ZeroMemory(pStr,Length+1);
char ch;
char ch3[3];
int Count = 0;
for (int i=0;i<Length;i++){
if (*(lpStr+i)=='%')
{
ch3[0] = *(lpStr+i+1);
ch3[1] = *(lpStr+i+2);
ch3[2] = 0;
sscanf(ch3,"%x",&ch);
*(pStr+Count) = ch;
Count++;
i+=2;
}
else if(*(lpStr+i)=='+'){
*(pStr+Count) = ' ';
Count++;
}
else {
*(pStr+Count) = *(lpStr+i);
Count++;
}
}
ZeroMemory(lpStr,Length);
strcpy(lpStr,pStr);
delete[] pStr;
return true;
}
Perl語言
############################################################################
# change the url code to text
# you can access the input data such as
# $field{'your id'}
sub formatit()
############################################################################
{
my (%field,$name,$value,@pairs);
my ($in) = @_;
$field{'data'}=$in;
@pairs = split(/&/,$in);
foreach (@pairs) {
$_ =~ s/\+/ /g;
($name,$value) = split(/=/,$_);
$value =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$name =~ s/%([a-fA-F0-9][a-fA-F0-9])/pack("C",hex($1))/eg;
$field{$name} = $value;
}
return (%field);
}
應(yīng)該是簡單多了,至少代碼變少了.
接下來該開始說Perl了........
在Windows下運(yùn)行Perl程序
Perl是一種腳本語言,所以你需要一個(gè)Perl的解釋器.
在www.cpan.org上你可以找到Perl的各種安裝版本,包括WIN32的版本.
我下載的是名為perl5.00402-bindist04-bc.zip的文件.
安裝時(shí)要比安裝Apache復(fù)雜一些.Perl沒有提供圖形的安裝界面,而使用
了DOS的文本界面,安裝程序是一個(gè)批處理文件.
先將你下載的zip文件解壓縮到一個(gè)臨時(shí)的目錄,你可以找到install.bat
文件,運(yùn)行他.安裝程序會向你詢問一些問題,像安裝路徑,是否安裝幫助文件等等.
特別的,會向你詢問你是否有C的編譯器,建議你回答No,如果想從新編譯Perl
或者進(jìn)行修改,請選擇yes并依照提示繼續(xù)安裝.
我想你應(yīng)該可以順利的安裝好,下面來試試.
用你的筆記本程序或是其他的什么文本編輯工具,輸入以下的perl程序
#C:\perl\binperl.exe
print "Hello Perl !!!";
把這個(gè)文件存到磁盤上,起一個(gè)名字比如hello.pl
現(xiàn)在打開一個(gè)DOS窗口,運(yùn)行c:\perl\bin\perl hello.pl
Hello Perl !!!
看見結(jié)果了嗎?
如果沒看見,檢查一下是不是路徑錯(cuò)了.
好了下面我們用perl寫一個(gè)簡單的CGI程序.
你可能會問是不是需要修改以下apache的配置以便可以運(yùn)行perl的CGI程序
不需要,你的apache已經(jīng)準(zhǔn)備好了:)
編寫以下文本,存為hellocgi.pl
#!c:/perl/bin/perl.exe
print "Content-type:text/html\n\n";
print "Hello CGI";
第一句用于指明perl.exe的位置.
和以前我們運(yùn)行C編寫的CGI一樣,把hellocgi.pl拷貝到apache的cgi-bin目錄下
然后用IE訪問loaclhost/cgi-bin/hellocgi.pl.看到結(jié)果了嗎?
如果沒有,檢查一下
1.是不是啟動了apache?
2.perl路徑正確嗎?
下面是如何在IIS上運(yùn)行perl cgi
首先安裝perl解釋器是必須的,這和上面我們說過的一樣.
接著安裝IIS,我只能假設(shè)你已經(jīng)有了一個(gè)Win2K并且也已經(jīng)有了可以使用的IIS.
下面只是如何設(shè)置IIS(IIS5.0)來運(yùn)行perl.
1.從"開始"菜單->"管理工具"->"Internet服務(wù)管理器"
2.新建虛擬目錄或使用已存在目錄(例:CGI-BIN)
3.打開目錄屬性對話框
4.在"應(yīng)用程序設(shè)置"中
4.1 "追加"應(yīng)用程序(如果沒有)
4.2 "配置"->"應(yīng)用程序映射"->"添加"
4.3 "可執(zhí)行文件"填"c:\perl\bin\perl.exe %s %s"(你的perl安裝路徑,注意 %s %s
必須)
4.4 "擴(kuò)展名"填".pl"
4.5 "確定"
5."執(zhí)行許可":"腳本和可執(zhí)行程序"
結(jié)束.
將上面hellocgi.pl拷貝到IIS的指定(例:cgi-bin)目錄下
用IE試試吧!
好了,就是這些了.