通过控制器查看文件,而不是通过直接访问。 htaccess的?

时间:2015-11-21 16:56:31

标签: php .htaccess codeigniter

在我看来,我有一个链接,允许用户在新窗口中查看文件:

<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文件来防止这种情况。 但是,这也会阻止查看我的文件...

我有点迷失方向。我应该将Deny保留在所有.htaccess规则中,并以另一种方式显示我的文件,或者,我是否应该调整.htaccess文件以使其拒绝所有文件,除了我的视图?

由于

1 个答案:

答案 0 :(得分:0)

这是因为您仍在使用其URL访问该文件,您应该使用实际的文件路径来读取该文件。

通常情况下,您使用base_url()代替'./',这意味着它将从您放置index.php文件的位置开始。

你不需要这里的视图,你应该把那些代码放在你的控制器中;在这里有一个观点根本没有任何意义。