這是我如何使用CakePHP實現它,它很好地工作。首先,我確定我的應用程序代碼位於公共html目錄之上,以便它不會暴露給網絡。所以基本上,用戶可以直接訪問的唯一文件是index.php文件,css/js和圖像文件。
然後,我更新我的檔案管理模式,以保存和刪除文件上飛:
function beforeSave() {
extract($this->data['Upload']['file']);
if(isset($name) and !empty($name)) {
$filename = time().'-'.$name;
if ($size && !$error) {
move_uploaded_file($tmp_name, APP . 'media/files/' . $filename);
$this->data['Upload']['file'] = $filename;
$this->data['Upload']['name'] = $name;
$this->data['Upload']['file_type'] = $type;
}
} else {
// remove the photo so it is not updated
unset($this->data['Upload']['file']);
}
return parent::beforeSave();
}
function beforeDelete() {
$data = $this->read(null, $this->id);
if(is_file(APP . 'media/files/' . $data['Upload']['file'])) {
unlink(APP . 'media/files/' . $data['Upload']['file']);
}
return true;
}
這將管理文件上傳,並把所有的命名信息到數據庫中。由於app/media/files目錄不能被網絡訪問,我不必保護目錄。這意味着無論用戶想要什麼文件,他們都必須從網站訪問它。
然後,您所要做的就是確保模型表中有一個「可共享」標誌,表明該文件可以被全世界訪問,然後任何人都可以看到該文件並下載它。
請在回答中更清楚地尋找答案 – Gordon 2010-08-17 13:35:34
@Gordon:如何去考慮這些問題。對於上述各點,你可以提出什麼建議?例如,如何做第三點或如何做上傳日誌。 – Sarfraz 2010-08-17 13:46:38
是不是像擁有正確的數據庫字段的權限一樣簡單,然後一個腳本在檢查權限後提供文件? – zaf 2010-08-17 14:53:46