2015-11-21 121 views
1

在我看來,我有一個鏈接,允許用戶查看在新窗口中的文件:通過控制器查看文件,而不是通過直接訪問。 htaccess的?

<li> 
    <a href="/files/fileview/<?php echo $files_selectallrow->fileid; ?>" target="_blank"> 
    <i class=" icon-file-eye"></i> 
    View this file 
    </a> 
</li>           

這會將通過控制器的文件,該文件顯示在一個視圖中的文件:

控制器:

//Load model 
$this->load->model('files/files_model');   

//Lookup file 
$file = $this->files_model->findfilebyid($fileid); 

//Get data  
$data['file'] = base_url(). '' . $file->filenamepath."/".$file->filename.".".$file->filetype ; 
$data['header'] = $file->filetypeheader; 

//Load view 
$this->load->view('portal/files/fileview_view', $data); 

查看:

// Let the browser know what file is coming. 
header("Content-type: ".$header); 
header("Content-Length: " . filesize($file)); 

// Send the file to the browser. 
readfile($file); 

這完美的作品,一它應該。 現在當然,默認情況下,你可能能夠查看文件,以通過直接鏈接訪問它,比如:http://www.example.com/filestorage/myfile.pdf

我想避免這種情況通過添加.htaccess文件與所有規則拒絕。 但是,這也阻止查看我的文件...

我有點失去了我應該如何處理這個問題。我應該保留拒絕所有.htaccess規則,並以另一種方式顯示我的文件,或者,我是否應該修改.htaccess文件,以便拒絕所有文件,除了我的視圖?

感謝

+0

使用您的方法,您可以將pdf放在public_html文件夾之外,以防止全局訪問。只要確保在public_html之前將它們上載到目錄中,並將相應的路徑正確保存到數據庫中即可。 – sotoz

回答

0

這是因爲你使用它的URL仍在訪問該文件,您應該用實際的文件路徑來讀取文件。

通常情況下,您將使用'./'而不是base_url(),這意味着它將從放置index.php文件的位置開始。

而且您不需要在這裏查看,您應該將該代碼放在您的控制器中;這裏有一個觀點根本沒有任何目的。

相關問題