@otctynhuk

Почему разваливается php скрипт, отдающий файл пользователю?

Столкнулся с проблемой следующего характера:
Есть tif или mdi файл, лежащий на сервере.
При попытке отдать файл пользователю, через web, скрипт отваливается на выводе.
Код примерно следующий:
header('Content-Description: File Transfer');
header('Content-Type: ' . $file_mime_type);
header('Content-Disposition: attachment; filename="' . $file_name . '"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $file_size);

echo file_get_contents("path/to/file.tif");


Скрипт перестает работать в момент самого вывода с помощью echo.
Замена echo на print(file_get_contents("path/to/file.tif")) или readfile("path/to/file.tif") проблему не решает.
Включение вывода всех ошибок результата не дает, ошибок не выводится.
Вывод других типов файлов - pdf/docx/xlsx/прочее работает, файл корректно отдается пользователю для скачивания
По логам apache пользователь получает ровно столько байт, сколько весит сам проблемный файл, но в браузере выдается "Невозможно отобразить страницу"

Есть подозрение, что дело в бинарном представлении tif и mdi, но что именно - накопать не могу.

Спасибо всем откликнувшимся.
  • Вопрос задан
  • 136 просмотров
Пригласить эксперта
Ответы на вопрос 2
KorniloFF
@KorniloFF
Работаю по font-end / JS
Попробуй следующие правки:

1. header("Content-Type: application/force-download");
2. readfile("path/to/file.tif"); exit();
Ответ написан
Комментировать
gds1
@gds1
Пыха - это наше всё)))
попробуйте таким образом, по аналогии

$file = ("../add/price.docx");
header ("Content-Type: application/octet-stream");
header ("Accept-Ranges: bytes");
header ("Content-Length: ".filesize($file));
header ("Content-Disposition: attachment; filename=".$file);  
readfile($file);
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы