我尝试使用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');
没有成功
答案 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提及在十六进制编辑器中比较文件