最近更新 - 使用說明 - 測試區 - 搜尋:
●獅吼文集
楔子?
佛法入門?
三藏經典?
修持正見
法義討論
實修儀軌?
名相淺釋?
佛教X檔案?
學佛心得?
佛教人物?
●其它
暫存區?
工作討論?
編輯選單

連結!pmwiki.org
* Cookbook
* Development
* PmWikiUsers
* SuccessStories

編輯本頁 列印預覽 群組歷史 本頁歷史
PmWiki 有一個 upload.php 的檔案提供從瀏覽器上傳檔案的功能,在 PmWiki 中可以很簡單地利用上傳語法,本頁是說明如何打開 PmWiki 預設安裝時未開啟的上傳功能。

注意安全

1. 顯而易見,讓任何人都能夠上傳檔案是有相當的危險性,upload.php 檔案已經預防了一些危險,但是 WikiAdministrators (英文)應該明瞭開放上傳功能潛在的危險性,如果不善加設定上傳功能很容易造成對伺服器的危害。

2. 預設的設定中,允許具備上傳權限的用戶得以覆蓋網站中的檔案(無法回復),如果不希望上傳檔案會被覆蓋,可以在 config.php 中設定:
 $EnableUploadOverwrite = 0;

基礎安裝

如果 config.php 中設定上傳功能的變數 $EnableUpload 設定為 1,則 upload.php 檔案就會被 stdconfig.php 自動啟動。

config.php 中也能設定 $UploadDir 與 $UploadUrlFmt 這兩個變數來分別指定上傳目錄(儲存由瀏覽器上傳的檔案),以及讀取上傳目錄所用的網址;$UploadDir 預設的目錄是 uploads(與網站的 pmwiki.php 在同一目錄中)。

為了安全緣故,config.php 中也應該設定預設的上傳密碼(參見 PasswordsAdmin ).

一個開放上傳功能的 PmWiki,它的 config.php 中應該有下列設定:
    <?php
      $EnableUpload = 1;
      $UploadDir = "/home/john/public_html/uploads";
      $UploadUrlFmt = "http://www.john.com/~john/uploads";
      $DefaultPasswords['upload'] = crypt('mysecret');
      ## more configuration entries here...
    ?>

$UploadDir 應該要具有可寫入的權限(執行web server程序的用戶);
WikiAdministrator 可以手動建立上傳目錄,不過當上傳功能被啟動時,PmWiki 會試著自己去建立需要的目錄;如果使用者希望 PmWiki 能自動產生必要的目錄,使用者必須依循下列程序來做:
 #改變 PmWiki 的根目錄權限為 2777(例:chmod 2777 /home/john/public_html)
 #執行已經開啟上傳功能的 PmWiki(用瀏覽器連結到 pmwiki.php)
 #確認上傳目錄已經被自動建立(在終端機中執行 ls /home/john/public_html)
 #再將 PmWiki 根目錄的權限改回來 (例:chmod 755 /home/john/public_html)。

使用上傳功能

只要在頁面中一般的網址最後加入 "?action=upload",使用者就會被要求輸入 upload 的密碼(參考 Passwords 和 PasswordsAdmin 的資訊來設定各層級的密碼權限)。

上傳檔案的另一種方法是在頁面中需要引用檔案(例如一張圖片)的位置輸入 "Attach:檔案名稱.副檔名"
(儲存頁面後,"Attach:檔案名稱.副檔名" 後面會出現一個 ? 問號,按下它會導引到進行上傳檔案的頁面)

PmWiki 預設會替各群組分別出不同的次目錄來儲存上傳的檔案,如果想要更改此一設定,請修改 $UploadPrefixFmt 變數值。

如何限制上傳檔案

filenames - 檔案名稱僅能包含英文字、數字、底線、連字號和句點,開始與結束也僅能是文字或數字;變數$UploadNamePattern 是用來管理此一功能的。

file extension - 只有某些特定附檔名 ".gif"、".jpg"、".doc"等等的檔案才被接受;這是安全性的考量,避免被傳入 .php 或 .cgi 之類的可執行檔。

file size - 預設僅接受不超過 50K bytes 的檔案, $UploadMaxSize 變數可以更改這個限制,例如改為100K,只要這樣更改:
    $UploadMaxSize = 100000;

事實上,管理者可以針對不同的檔案類型分別設定最大值限制,例如限制 ".gif" 和 ".jpeg" 檔案最大為 20K, ".doc" 檔案可到 200K, 然後其他檔案則遵守 $UploadMaxSize 的預設值。

$UploadExtSize 陣列可用附檔名來指定最大值,例如這樣設定:
    $UploadExtSize['gif'] = 20000; # 限制 .gif 檔案最大值為 20K

設定最大值為 0 也就等同於限制此種檔案的上傳:
    $UploadExtSize['zip'] = 0;  # 不允許 .zip 壓縮檔上傳 

也可以更方便的這樣設定:
    $UploadExts = array('gif','jpeg','jpg','png','ppt');  
    $UploadMaxSize = 20000;
    $UploadExtSize['ppt'] = 150000;
    $UploadExtSize['doc'] = 150000;
僅允許 GIF、JPEG、PNG 檔案最大為 20K,PowerPoint 和 Word 檔可到 150K,其他檔案都不允許。

與上傳檔案限制有關的其他設置

  • Apache 2.0 Web Server設定檔中的 LimitRequestBody(針對所有網頁,包含上傳)
    Apache 的預設值應該是沒有限制,不過某些網站管理者會更改這個設置。
    您可以編輯 httpd.conf 或是 php.conf(通常在 /etc/httpd/conf.d 目錄下)。

  • PHP 本身也有兩個與上傳限制相關的設置
    第一個是:upload_max_filesize 參數, 預設值通常是 2M。
    第二個是:post_max_size, 預設值通常是 6M。

如果上面三種設定不相符(pmwiki、apache、php),相對最小的數值就是上傳的限制。

  • 特別注意:可讀取上傳檔案的權限並不會被任何預設的權限管理所管控,即使頁面被 read 密碼管控住,上傳目錄中的檔案還是可以被讀取(例如有人直接用連結取用)。
編輯本頁 - 列印預覽 - 群組歷史 - 本頁歷史 - 搜尋
本頁更新於 2004 年 04 月 01 日,07:32 PM