Я пытаюсь отправить файл TIFF из контроллера в Kohana Framework версии 3.2 (я знаю, что он немного устарел) с помощью метода response-> send_file (), файл загружен в браузер, и размер в порядке. но когда я пытаюсь просмотреть его, я получаю сообщение об ошибке, показывающее, что файл поврежден. Я загружаю тот же файл, используя 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 () перед отправкой файла и проблема решена. Кажется, где-то в моих кодах или структура базы была добавлена в выходной буфер и файл был поврежден
public function action_file() {
$this->auto_render = false;
$path = '/tmp/test.tiff';
ob_clean();
$this->response->send_file($path);
}
Спасибо zerkms за упоминание сравнения файлов в шестнадцатеричном редакторе
Других решений пока нет …