尝试将php中的tiff文件发送给客户端但下载后文件已损坏

时间:2018-01-30 22:52:51

标签: php kohana-3.2

我尝试使用response-> send_file()方法从Kohana框架版本3.2中的控制器发送tiff文件(我知道它有点旧),文件在浏览器中下载并且大小还可以。但是当我尝试查看它时,我收到错误,显示文件已损坏。我使用ssh下载相同的文件,我可以毫无问题地查看它。当我比较notepad ++编码中的文件时,工作文件是ANSI,但是对于损坏的文件是utf-8-bom。这是我控制器中方法的代码:

public function action_file() {
    $this->auto_render = false;
    $path = '/tmp/test.tiff'
    $this->response->send_file($path);
}

我阅读了Kohana send_file源代码,我发现它正在使用:

echo fread(...)

将文件发送到客户端。 如何更改输出缓冲区的编码,使文件采用ANSI(Windows-1252)格式? 我试过了

mb_http_output('Windows-1252');
mb_internal_encoding('Windows-1252');

没有成功

1 个答案:

答案 0 :(得分:0)

我在发送文件之前添加了ob_clean()并解决了问题。它似乎在我的代码中或框架BOM被添加到输出缓冲区并且文件已损坏

public function action_file() {
    $this->auto_render = false;
    $path = '/tmp/test.tiff';
    ob_clean();
    $this->response->send_file($path);
}

感谢zerkms提及在十六进制编辑器中比较文件