文件路径设置为$ this-> response-> file()CakePHP3

时间:2017-08-08 00:54:36

标签: php cakephp cakephp-3.0

我正在尝试使用CakePHP3制作文件下载功能,并且无法将其传递到$ this-> response-> file()的正确文件路径;这是我的职责:

public function download($id)
{
    $attachment = $this->Attachments->get($id);
    $this->response->file(WWW_ROOT.$attachment->filepath.DS.$attachment->filename);
    $return $this->response;
}

file()函数中的完整文件路径是正确的。但是,file()函数输出带有额外路径。

正确的文件路径是 SERVER_ROOT / public_html / attachments / filename

输出路径为 SERVER_ROOT / src // SERVER_ROOT / public_html / attachments / filename

所以,file()函数似乎输出了src /的文件路径,这是我不想要的。如何让它输出正确的路径?或者我应该在这种情况下使用其他功能?任何帮助表示赞赏!

3 个答案:

答案 0 :(得分:0)

所以,问题实际上是错误的网址。虽然错误消息很奇怪,但file()函数确实接受了完整的文件路径。感谢ndm的评论!这个链接很有帮助。 CakePHP 3 - Production site download file path issue

答案 1 :(得分:0)

我来到这里是因为我有同样的问题,过了一会儿我才解决了。 问题基于:

protected function validateFile($path)
 {
     if (strpos($path, '../') !== false || strpos($path, '..\\') !== false) {
         throw new NotFoundException(__d('cake', 'The requested file contains `..` and will not be read.'));
     }
   if (!is_file($path)) {
         $path = APP . $path;
     }

     $file = new File($path);
     if (!$file->exists() || !$file->readable()) {
         if (Configure::read('debug')) {
             throw new NotFoundException(sprintf('The requested file %s was not found or not readable', $path));
         }
        throw new NotFoundException(__d('cake', 'The requested file was not found'));
     }

     return $file;

}

validateFile()函数返回APP常量,这是你的情况下SERVER_ROOT / src /的路径。所以问题是文件位置。如果它甚至存在于该名称/,请尝试在本地主机上查找路径

答案 2 :(得分:-2)

您应该在引导文件中配置它。 wwwRoot和wwwWebRoot在这里找到这两个

https://book.cakephp.org/3.0/en/development/configuration.html