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

Trying to send a tiff file in php to client but the file is damaged after download

我正在尝试使用 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');

没有成功

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

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

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