【问题标题】:Cakephp response (sending files) breaks when model functions are added添加模型函数时,Cakephp 响应(发送文件)中断
【发布时间】:2013-12-02 00:21:34
【问题描述】:

我已经使用默认操作烘焙了一个文件模型和控制器。现在我正在尝试添加一个显示功能,可用于以受控方式显示图像。

我想保护图像,以便显示功能可以检查用户是否有查看图像的权限(图像目录不在 webroot 中)。

我无法让它工作,但是当我从头开始时,我设法发现真正最小的功能确实有效。

工作函数如下所示:

public function display($id) {
  $this->response->file(ROOT.DS.'img'.DS.'noimage.jpg');
  return $this->response;
}

当我添加示例时:

$test=$this->File->findById($id);

到函数开始,一切都中断了。

--> http://www.example.com/files/display/1
The requested file /var/www/example.com/www/img/image.jpg was not found or not readable
Error: The requested address '/files/display/1' was not found on this server.

我尝试过调试零,文件可以找到并且可读,显然是因为没有 findById 的函数有效。

有什么想法吗?

cakephp 2.4.3

【问题讨论】:

    标签: image cakephp response


    【解决方案1】:

    你的路径完全错误。 你 debug() ROOT.DS.'img'.DS.'noimage.jpg' 实际持有什么? 我敢打赌,如果你这样做了,你可能会自己找到解决方案

    img 文件夹最有可能在 webroot 中

    WWW_ROOT . 'img' . DS . 'noimage.jpg'
    

    请注意,路径通常以 DS 结尾,因此无需再次添加。 所以如果真的是ROOT中的图片文件夹:

    ROOT . 'img' . DS . 'noimage.jpg'
    

    另请注意,您可以使用以下方法轻松检查路径是否有效

    file_exists()
    

    如果文件具有正确的文件权限,这应该返回 true。

    编辑: $this->File->...:文件不是模型名称的好选择,因为它与 Utility 中现有的核心类发生冲突。您的模型命名方案需要更有创意。

    【讨论】:

    • 它不在 webroot 中并且 file_exists 返回 true。如果我没有 findById 行,函数甚至可以工作。
    • 那么图像的确切文件系统路径是什么?我非常怀疑添加模型方法会改变这里的任何东西。错误消息非常简单。
    • 错误信息中说。 “/var/www/example.com/www/img/image.jpg” cake 安装到“/var/www/example.com/www/app/” 目录。我也会怀疑这一点,除非没有它它就无法工作。也许这与标题、空格或其他东西有关。这真的很令人困惑,因为这应该很容易做到。
    • 我同意,这很容易做到。我能想到的唯一其他解释是错误的文件权限。
    • 这也被检查了,所有者是 www-data 并且权限是 777。仍然,没有任何模型函数,一切正常。在那方面一切都应该没问题。但是这些模型函数为此做了什么?甚至 $this->File->recursive=0;打破它。
    猜你喜欢
    • 1970-01-01
    • 2013-10-23
    • 2020-04-26
    • 2015-12-08
    • 2014-06-25
    • 2014-06-08
    • 2015-07-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多