?? cgi4.htm
字號:
<html><!-- #BeginTemplate "/Templates/index.dwt" --><head><meta http-equiv=Content-Type content="text/html; charset=gb_2312-80"><title>ChinaPerl</title>
<LINK rel=stylesheet href=mystyle.css type=text/css>
</head><body>
<table border=0 cellspacing=0 bgcolor=#80FFFF width=100%>
<tr>
<td align=left rowspan=2 width=150>
<div align="center"><img src=image/perl.gif height=85 width="85"></div>
</td>
<td align=center><img src=image/perl.gif height=85 width="85"></td>
</tr><tr>
<td colspan=2 align=center> </td>
</tr></table>
<table border=0 width=100% height=400 cellspacing=0 cellpadding=0>
<tr>
<td width=20% valign=top bgcolor="#dddddd">
<table border=0 width=100% cellpadding=0><tr><td width=5%></td>
<td width=95%>
<p align=center>Perl 5教程<br>
<a target=_blank href=http://flamephoenix.126.com>by flamephoenix</a><a href="http://perl.yesky.net"><br>
<font color="red">修訂 by RNY<br>
</font></a>2000-08-30</p>
<p align=center><a href="index.htm">目錄</a></p>
<p align=center>第一部分 Perl語言</p>
<p><a href=perl1.htm>第一章 概述</a></p>
<p><a href=perl2.htm>第二章 簡單變量</a></p>
<p><a href=perl3.htm>第三章 操作符</a></p>
<p><a href=perl4.htm>第四章 列表和數組變量</a></p>
<p><a href=perl5.htm>第五章 文件讀寫</a></p>
<p><a href=perl6.htm>第六章 模式匹配</a></p>
<p><a href=perl7.htm>第七章 控制結構</a></p>
<p><a href=perl8.htm>第八章 子程序</a></p>
<p><a href=perl9.htm>第九章 關聯數組(哈希表)</a></p>
<p><a href=perl10.htm>第十章 格式化輸出</a></p>
<p><a href=perl11.htm>第十一章 文件系統</a></p>
<p><a href=perl12.htm>第十二章 引用(指針)</a></p>
<p><a href=perl13.htm>第十三章 面向對象編程</a></p>
<p><a href=perl14.htm>第十四章 包和模塊</a></p>
<p><a href=func.htm>附錄一 函數集</a></p>
<p align=center>第二部分 Perl的CGI應用</p>
<p><a href=cgi1.htm>第一章 cgilib例</a></p>
<p><a href=cgi2.htm>第二章 動態創建圖像</a></p>
<p><a href=cgi3.htm>第三章 計數器的編寫方法</a></p>
<p><a href=cgi4.htm>第四章 Web Server設置</a></p>
第五章、...<br></td></tr></table></td>
<td width=80% valign=top>
<div align="center"></div>
<table border=0 width=100% cellpadding=0>
<tr bgcolor="#00FF80">
<td colspan="2">
<div align="center"> Perl教程 | <a href="perl5manual.zip">下載全文</a>
| <a target=_blank href=http://www.turbolinux.com.cn/cgi-bin/linux/wwwthreads.pl?action=list&Board=perl>Perl論壇</a>
| <a href="http://perl.yesky.net">推薦站點</a> | 關于我們 </div>
</td>
</tr>
<tr>
<td colspan="2"><!-- #BeginEditable "body" -->
<p align=center>第四章 設置Web Server以運行CGI</p>
<p align=center><a target=_blank href=http://flamephoenix.126.com>by
flamephoenix</a></p>
<a href=#1>一、NCSA Server</a><br>
<a href=#2>二、CERN httpd</a><br>
<a href=#3>三、Netscape Server</a><br>
<a href=#4>四、IIS</a><br>
<br>
<br>
<a name=1>一、設置NCSA Server或Apache Server以使用CGI</a><br>
<p>NCSA Server的CGI1.1只允許用下列兩種方式激活用戶服務器上的腳本:ScriptAlias指令和AddType指令。這兩條指令都放在srm.conf文件中,該文件一般在用戶的服務器根目錄的conf目錄中。</p>
<p>ScriptAlias指令告訴服務器該目錄中的所有文件都是腳本或者是服務器作為CGI文件執行的程序。該方法能保證用戶的CGI程序在特定位置。AddType指令允許用戶告訴服務器任何具有指定前綴的文件都是可執行文件。如果希望將CGI程序放在服務器中任何地方的話該指令即很有用。</p>
1、ScriptAlias指令<br>
<p>ScriptAlias指令位于Server Resource Map文件(srm.conf)中,程序內容例如下:</p>
<blockquote>DocumentRoot /usr/local/etc/httpd/htdocs<br>
UserDir public_html<br>
REdirect /HTTPD/ http://www.server.com/<br>
Alias /icons/ /usr/local/etc/httpd/icons/<br>
ScriptAlias /cgi-bin/ /usr/local/etc/httpd/cgi-bin/<br>
DirectoryIndex index.html index.shtml index.cgi<br>
IndexOptions FancyIndexing<br>
AddIcon /icons/movie.gif .mpg .qt<br>
AddIcon /icons/menu.gif<br>
AddIcon /icons/blank.xbm<br>
DefaultIcon /icons/unknown.xbm<br>
<br>
IndexIgnore */.??* *~ *# */HEADER* */README*<br>
DefaultType text/plain<br>
AccessFileName .htaccess</blockquote>
<p>srm.conf文件允許用戶根據自己系統需要設置HTTP Server。它允許用戶告訴服務器用戶的主頁在什么地方,目錄中的哪個文檔是索引文檔,如果不存在索引文件的話將裝載什么圖片文件以顯示文件的類型,等等。srm.conf及其他配置文件的說明可查閱<a target=_blank href=http://hoohoo.ncsa.uiuc.edu/docs/setup/Configure.html>http://hoohoo.ncsa.uiuc.edu/docs/setup/Configure.html</a>。</p>
2、AddType指令
<p>AddType指令是執行CGI程序的另一種方式,它是在srm.conf文件中加入下列行:</p>
<p>AddType application/x-httpd-cgi.cgi</p>
<p>在自己的系統中設置了該指令后,任何在服務器控制范圍內的擴展名為.cgi的文件都會被作為CGI程序執行而不是作為文本文件閱讀。這意味著用戶可以在他的個人目錄中創建腳本并能執行它。但是如果腳本寫得不正確,就可能導致對文件系統、口令文件等的不同類型傷害。</p>
<p>AddType指令可以擴展為允許擴展名不是.cgi的程序同樣被執行。大家經常會看見以.pl(Perl腳本的常見擴展名)或.sh(Bourne
Shell腳本的常見擴展名)結尾的腳本。如果想支持其他擴展名的程序,只需簡單地將它們加入AddType指令中,如下所示:</p>
<p>AddType application/x-httpd-cgi .cgi .pl .sh</p>
3、訪問配置文件
<p>為了支持CGI程序的執行必須多加入一條指令。在Server Root/conf目錄中是一個名為access.conf的配置文件。該文件允許用戶設置ServerRoot下的哪個目錄能夠訪問的全局限制,甚至允許用戶控制哪些站點可以訪問這些目錄。下面是access.conf文件的一個例子:</p>
<blockquote><Directory /usr/local/etc/httpd/cgi-bin><br>
Options INdexes Exec CGI<br>
</Directory><br>
<br>
<Directory /usr/local/etc/httpd/htdocs><br>
Options Indexes FollowSymLinks<br>
AllowOverride All<br>
<Limit GET><br>
order allow,deny<br>
allow from all<br>
</Limit><br>
</Directory></blockquote>
<p>Exec CGI表示允許執行該目錄中的CGI腳本。Options Indexes FollowSymLinks表示允許索引(顯示某文件夾中的內容)并能夠遵循符號鏈(這就意味著在ServerRoot之外的文件也能被訪問)。AllowOverride指令允許用戶決定哪個指令可以被目錄的.htaccess文件覆蓋。<limit GET>中設置了對該目錄中允許使用GET方式的限制。在HTTPD中,<limit>部分指令的選項是GET、POST和PUT(目前PUT尚未實現)。order
allow,deny一行告訴服務器先找allow行再找deny行。下一行則是告訴服務器允許所有站點訪問該目錄中的頁面。</p>
<a name=2>二、設置CERN HTTP服務器以使用CGI</a>
<p>CERN HTTP服務器(也稱為W3C HTTP服務器)僅需要編輯/etc/httpd.conf文件即可支持在服務器內使用CGI程序。這個指令類似于NCSA
Server使用的指令:</p>
<p>Exec /url-prefix/* /physical-path/*</p>
<p>其中/url-prefix/定義了客戶能看見的路徑,而/physical-path/則是包含腳本的目錄的實際路徑。</p>
<a name=3>三、設置Netscape以使用CGI</a>
<p>首先要啟動管理服務器。以root身份登錄,并運行/ServerRoot/admserv/start-admin,缺省端口為81。然后啟動瀏覽器連接。在Netscape
Admin頁面中,單擊Select URL Mapping,從彈出窗口中選擇Map a URL to a Local Directory。然后單擊Select
CGI and Server Parsed HTML,從彈出窗口中選擇Activate CGI as a File Type?,F在即可單擊Browse
Files并選擇欲激活的目錄。選擇完目錄后,單擊I'd Like to Activate CGI as a File Type。在ServerRoot中即會看到Conf目錄中的obj.conf配置文件中已加入了下列行:</p>
<p>NameTrans form="/cgi-bin" fn="pfx2dir" dir="/usr/local/web/cgi-bin"
name="cgi"</p>
<p>name=cgi調用了下列行:</p>
<blockquote><Object name="cgi"><br>
ObjectType fn="force-type" type="magnus-internal/cgi"<br>
Service fn="send-cgi"<br>
</Object></blockquote>
<p>它告訴服務器此為一個CGI目錄,其中的所有文件都將用Netscape內部提供的CGI執行。</p>
<a name=4>四、設置IIS以使用CGI</a><br>
<p>在IIS上運行CGI有十個簡單的步驟:</p>
<blockquote>1)安裝Internet Service Manager。<br>
2)從列表中選擇WWW Servive。<br>
3)選擇Properties/Service Properties命令。<br>
4)單擊Directories標簽。<br>
5)單擊Add按鈕。<br>
6)指定自己的cgi-bin目錄的完整路徑(例如,c:\webfiles\scripts)。<br>
7)使用/scripts作為目錄別名。<br>
8)選中Execute檢查框。<br>
9)單擊OK保存修改。<br>
10)將自己的CGI程序放在c:\webfiles\scripts中并在HTML中作為/scripts/someprogram.exe引用。</blockquote>
<p>在使用IIS時經常出現的問題與設置IIS沒太大關系而是和基本的操作系統功能有很大關系。IIS與底層的操作系統聯系很緊密,即使已經設置為服務,Web服務器基本上是作為應用程序來運行的,通常只有一個用戶安全環境,Web服務器能訪問到的與Web服務器下的CGI程序能訪問到的內容幾乎沒什么不同(這類似于UNIX環境,在UNIX環境下,很重要的一點就是不要將Web服務器作為root來運行)。IIS的工作很像一個擴展的文件系統。每個用戶有自己的權限。CGI程序在執行該程序的訪問者的用戶安全環境中運行。對于未驗證的頁面,這就是缺省提供的“無名的”用戶,而對驗證的頁面,安全環境就像用戶位于服務器控制臺前手工運行該程序一樣。使大部分初學者犯錯誤的正是這種額外的安全層次。</p>
<p>IIS管理員最常抱怨的一個錯誤信息是"The Application misbehaved by not returning
a complete set of headers"。錯誤消息接下來列出服務器接收到的頭標--一般是個空的清單。這種討厭的不明確的錯誤有一個直接的原因,不過這個原因與CGI腳本的錯誤操作沒有一點關系。如果因為某種原因某個CGI腳本不能運行,它就不能產生任何頭標。IIS將錯誤的責任推在腳本身上,實際上卻幾乎總是服務器管理員的錯。CGI腳本需要訪問系統DLLs、系統的臨時目錄以及它們使用的任何其他資源。如果該腳本是按靜態約束進行編譯的,那么除非所有組件均可用,否則操作系統不會裝載該程序的。如果系統管理員鎖緊了安全級使得腳本不能裝載它的DLLs,那么腳本就不能運行。當腳本不能運行時,它也就不產生任何頭標了(或者其他的輸入),從而導致出現本段開頭引用的錯誤消息。</p>
<p>如果管理員是在一個安全目錄中運行腳本的(安全目錄即是一個需要單獨用戶驗證才能訪問的目錄),那么每個可能訪問系統的用戶都必須有下列安全權限。如果是無名地運行腳本,那么只有無名用戶需要這些權限:</p>
<blockquote>.對%systemroot%system(一般為c:\winnt\system)的讀權限<br>
.對%systemroot%system32(一般為c:\winnt\system32)的讀權限<br>
.對臨時目錄(一般為c:\temp)的修改權限<br>
.對Web根的讀權限<br>
.對CGI目錄的修改權限</blockquote>
<p>如果在有了這些訪問權限之后仍然出問題,可以進一步臨時給特殊的用戶帳號Everyone賦予這些目錄的修改權限。如果問題解決了,就可以認定是少了一個步驟(或一個用戶)。糾正問題然后慢慢回收權限直至服務器重新安全。</p>
<p align=center><a href=cgi3.htm>上一章</a> 下一章 <a href=index.htm>目錄</a></p>
<p align=center> </p>
<!-- #EndEditable --></td>
</tr>
</table>
</td></tr></table></body><!-- #EndTemplate --></html>
?? 快捷鍵說明
復制代碼
Ctrl + C
搜索代碼
Ctrl + F
全屏模式
F11
切換主題
Ctrl + Shift + D
顯示快捷鍵
?
增大字號
Ctrl + =
減小字號
Ctrl + -