2011-11-05 45 views
1

我想跟進a question我以前問過我還不能回答。php codeigniter如何限制訪問目錄中的文件使用控制器

總而言之,www.mysite.com/uploads的目標是讓「上傳」成爲一個php控制器和一個目錄。

用戶「匿名」給出的關於在「上傳」控制器構造函數中編寫一些認證的答案是我試圖做的,但對我而言還沒有工作。

我通過一個名爲「內容」控制器返回每個內容的詳細信息,包括其src=""目錄位置:

/content/account_id# (e.g., 3)/item_id# ((e.g., 2) 

www.mysite.com/content/3/2視圖文件,我喜歡玩的內容,例如,視頻文件,通過上述視頻標籤的src屬性。在這種情況下,src="/uploads/3/2/my_video.m4v"

這是我上傳控制器代碼至今:

class Uploads extends CI_Controller { 

function Uploads() 
{ 
    parent::__construct(); 

     $account_id= $this->session->userdata('account_id'); // =3 in this example 
     $item_id=$this->uri->segment('3'); // =2 in this example 
     $this->db->select('*'); 
     $this->db->from('items'); 
     $this->db->where('account_id, $account_id)->where('item_id, $item_id); 
     $query=$this->db->get(); 

     if(empty($query){ return false; } 
     else { return true; } 
    } 
} 

你可以從「項目」表查詢看到,我的目標,其中,如果給定ACCOUNT_ID不擁有一個給定的情景item_id,那麼他們無法訪問指定的「上傳」子目錄。

但是,此代碼顯然沒有做任何事情,因爲如果任何人,只是ACCOUNT_ID = 3的用戶,去www.mysite.com/uploads/3/2/my_video.m4v,他們仍然可以訪問此視頻(它是由火狐,Safari瀏覽器下載,並通過發揮通過鉻本地)。

任何想法可能會不勝感激!

回答

-1

您需要通過使用.htaccess文件來限制直接訪問。

然後,您必須在控制器中創建一個函數,該函數在用戶被授權後通過PHP流式傳輸文件。

+0

嗨minboost,我不熟悉如何編寫.htaccess規則,您是否願意提供一些代碼?謝謝! –

+0

CI中有很多htaccess文件(檢查不同的文件夾)。你可以創建一個新的,只要把'access deny all'放進去就可以了。 – minboost

+0

您好minboost,謝謝但在我的「上傳」目錄的根目錄中添加「拒絕全部訪問」拒絕訪問那裏的所有文件,無論我的「內容」控制器PHP腳本說什麼。你能否告訴我一些PHP允許授權用戶繞過這個.htaccess命令的感覺?你是說我應該讓我的控制器被稱爲「上傳」,而不是?謝謝! –