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


View file via controller, not via direct access. 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);

这是完美的,因为它应该。当然,现在默认情况下,您可以通过直接url访问文件来查看该文件,例如:http://www.example.com/filestorage/myfile.pdf

我想通过添加一个带有"拒绝所有"规则的.htaccess文件来防止这种情况。但是,这也阻止了查看我的文件的视图。。。

我有点不知道该如何处理这件事。我应该保留"拒绝所有.htaccess"规则,并以另一种方式显示我的文件,还是应该调整.htacccess文件,使其拒绝所有内容(从我的角度来看除外)?

感谢

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

通常使用'./'而不是base_url(),这意味着它将从放置index.php文件的位置开始。

这里你不需要视图,你应该把代码放在你的控制器里;在这里欣赏风景毫无用处。