尝试向客户端发送 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提到在十六进制编辑器中比较文件
我正在尝试使用 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提到在十六进制编辑器中比较文件