在我的视图中,我有一个链接,允许用户在新窗口中查看文件:
<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文件的位置开始。
这里你不需要视图,你应该把代码放在你的控制器里;在这里欣赏风景毫无用处。