[ 永遠的UNIX::UNIX技術資料的寶庫 ]   GB | BIG5

首頁 > 編程技術 > Perl > 正文
Perl CGI 程式寫作常問問題集(3)CGI 與 WWW Server
不詳 (2001-05-15 05:15:00)
  
  3.0 - CGI 與 WWW Server

--------------------------------------------------------------------------------

Q3.1: 我的 Perl CGI 程式要放在哪裡執行?cgi-bin 這個目錄是做甚麼用的?
server 通常是設定成去執行放在 ``cgi-bin'' 目錄底下的 CGI 程式。不過, server 管理者同時也可以在設定檔中設定 aliases,讓所有含某些副檔名(如 .cgi、.pl)的 scripts 都能執行*。 

【譯者】設定 CGI aliases 和副檔名固然很方便,但 server 管理者須注意到相 關的安全問題。 


--------------------------------------------------------------------------------

Q3.2: 什麼是檔案使用權限?怎樣改?
檔案權限是根據使用者識別代號(又稱 uid),以及他們所屬的團體來決定是否賦 與使用者讀、寫,和執行某檔案的權利。您可使用 chmod 這個指令去修改檔案的 使用權限。例如: 

% ls -ls form.cgi

  1 -rwx------  1 shishir       974 Oct 31 22:15 form.cgi*

此一檔案的權限為 0700(八進制),意味著沒有人(檔案所有人除外)能夠讀取、 寫進,或執行這個檔案。我們可以用 chmod 這個指令去修改它的權 限: 

% chmod 755 form.cgi
% ls -ls form.cgi

  1 -rwxr-xr-x  1 shishir       974 Oct 31 22:15 form.cgi*

這樣一來,權限就變了。現在和 ``shishir'' 在同一個團體的使用者,還有其他 任何的使用者都有權利去讀取和執行這個檔案了。 

如欲知 chmod 指令各八進制數碼所代表的含意,請參閱 chmod manpages的說明。 


--------------------------------------------------------------------------------

Q3.3: Perl 應該安裝在哪裡才可以執行它?
Perl 可以安裝在系統上任何一個角落!您唯一要注意的是 server 不能在chroot 的環境下跑,否則它便無法跑 perl 解譯器。換言之,系統管理者可以把根目錄 改變,讓 ``/'' 指到另一個目錄,而不是實際真正的根目錄(``/'')。 


--------------------------------------------------------------------------------

Q3.4: 我為什麼一直得到 ``Server: Error 500'' 的訊息?
以下幾種情形會觸發這個錯誤訊息: 

如果 script 開頭的地方沒有 ``#!/usr/local/bin/perl'' 這個指到 Perl 解譯器的標頭,或者是指到解譯器(或 library 檔)的路徑錯誤。 
如果 script 輸出的第一行是一個不正確的標頭(即 ``Content-Type: text/html'' ),或者是該標頭後面沒有跟著一個空行。 
如果您的 script 有句法上的錯誤。您的 scripts 都應在指令列先跑跑看才 是。 

--------------------------------------------------------------------------------

Q3.5: 我試著打開一個檔案,想把資料儲存在裡頭,但是 open() 的指令失敗了。到底是怎麼搞的?
一般說來,HTTP server 是以 ``nobody''、``www'',或其他這類權限低的使用 者的身份來跑的。因為這個緣故,您打算在其中制造新檔案的目錄,對 server 跑的 使用者 ID 必須要是可寫(writable)才行。 

為了確定起見,您每次都應該先檢查 open 這個指令送回的結束狀態(return status),看看 open 有沒有成功。 

open(FILE, "/abc/data.txt")
    || error("Could not open file /abc/data.txt");

.
.
.

sub error {
    my($message) = @_;

    print <Content-type: text/html
Status: 500 CGI Error


CGI Error

Oops! Error




$message





End_of_Error
}
  
 
(http://www.fanqiang.com)
    進入【UNIX論壇

相關文章
Perl CGI 程式寫作常問問題集(4)安全 (2001-05-15 07:15:00)
Perl CGI 程式寫作常問問題集(4)程式設計疑難雜症 (2001-05-15 06:15:01)
Perl CGI 程式寫作常問問題集(3)CGI 與 WWW Server (2001-05-15 05:15:00)
Perl CGI 程式寫作常問問題集(2) Modules (模組) (2001-05-15 04:15:00)
Perl CGI 程式寫作常問問題集(1)入門簡介 (2001-05-15 03:15:01)
 

★  樊強制作 歡迎分享  ★