Откройте файл в браузере, который подается из Stack Overflow

Простой вопрос, возможно, задавался миллион раз, но я искал и не приблизился к тому, чтобы заставить это работать.

У меня есть PHP-скрипт в рамках UserFrosting, который передает файл пользователю через его браузер. Я хотел бы, чтобы файл открывался в их браузере, если они выбрали «Открыть» вместо загрузки.

Проблема в том, что правильно открываются только текстовые файлы. Все остальное (PDF и JPG, протестированные до сих пор) просто открываются как страница ASCII / искаженного кода, а не интерпретируются как PDF или изображение.

Вот код, который я использую:

header('Content-Type: '. $mime);
header('Content-Length: ' . filesize($diskname));
header('Content-Disposition: inline; filename=' . $savename);
return readfile($diskname);

$mime тип Mime файла, установленного с помощью функции, поэтому может быть application/pdf или же image/jpeg для файлов, которые я пытаюсь просмотреть до сих пор.

У кого-нибудь есть идеи, почему файлы не открываются правильно?

ОБНОВИТЬ
Проверив заголовки ответа, я получаю тип контента text/html;charset=UTF-8 вместо application/jpeg или же application/pdf что он должен был быть установлен в соответствии с кодом, который я использую. Мне интересно, если это проблема UserFrosting?

1

Решение

Хорошо, проблема решена. Как я и подозревал, это было связано с фреймворком UserFrosting или, точнее, Slim.

Вместо настроек заголовки используют header('Content-Type: image/jpeg');Я должен был сделать следующее:

$this->_app->response->headers->set('Content-Type', $mime);

Задача решена. 🙂

1

Другие решения

Поскольку я не могу комментировать причину репутации, мне придется ответить, даже если я не уверен на 100%, что это ваша проблема.

Дело в том, что иногда PHP-файлы могут доставлять массу хлопот.

 <--- this little empty line
<?
code goes here
?>
<--- or this one

Помеченная пустая строка может уничтожить ваш заголовок. Вы проверили все свои файлы на наличие пустых строк, которые интерпретируются как содержимое вместо PHP-кода?

Включение предупреждений также может помочь в этом вопросе. Если есть какой-либо контент до установки заголовков, вы обычно получаете предупреждение, в котором говорится именно это.

У нас это было однажды в нашей компании, и это стоит 3 нашим разработчикам почти целый день, чтобы найти, потому что … причины.

РЕДАКТИРОВАТЬ: Видя ваш комментарий «Кодировка символов документа HTML не была объявлена». на самом деле подчеркивает мое заявление. Во всяком случае, не уверен на 100%.

0

По вопросам рекламы [email protected]