我的网站应用程序中有一个文件夹data
,它不在网络根目录中。这样做是为了提高安全性,因此只有某些人才能访问它。通过查看 CakePHP 文档,我使用的代码如下:
foreach($ImageToSort as $FileDisplayKey => $FileDisplayData) {
$FileName = $ImageToSort[$FileDisplayKey]['Fileinfo']['filename'];
$WholePathName = 'data/'.$FileName;
}
$this->response->file($WholePathName);
return $this->response;
它加载文件但不在我的视图中(上面的代码在视图中,$ImageToSort
是从我的控制器中的 find 调用中设置的)。
那么如何通过某种循环加载不在 webroot 中的文件,以便我可以查看它们并以我选择的方式将它们放置在我的网站上?
PS。我不能将文件放在 webroot 文件夹中,因为有人只需要知道文件的名称就可以获取它。对这些文件的访问需要保留给少数人。
非常感谢您提供的任何帮助,
格伦
更新:
我正在使用 2.4,从我读到的媒体视图不是我应该使用的,但“发送文件”是取代它们的调用。我尝试将它们与以下代码一起使用:
$this->viewClass = 'Media';
$params = array(
'id' => $FileName,
'name' => 'example',
'extension' => 'jpg',
'path' => APP . 'uploads/test' . DS
);
$this->set($params);
debug($params['id']);
$name = $params['id'];
$path = $params['path'];
$filename = $path.$name;
//echo 'name::' .$name;
echo "<img src=";
echo $filename;
echo ">";
除非我将文件放入 中,否则无法找到该文件/webroot/data/test
,然后它可以正常显示。但这完全没有意义吗?我只需要选定的用户来查看选定的文件以解决安全问题。
以下代码在查看/app/data/test
路径中的文件时确实有效,
$this->autoRender = false;
$this->response->file(Configure::read('uploads').$WholePathName);
但是这段代码在控制器或视图中使用时没有区别,它仍然只显示文件,没有布局、样式、标题或任何东西。同样,这完全没有意义。
必须有一种方法可以让我可以访问我的文件并读取我需要的文件/文件夹。
格伦