PDF-файл печатается в виде текста в браузере, а не загружается

#php #pdf #download #http-headers #php-5.3

#php #PDF #Скачать #http-заголовки #php-5.3

Вопрос:

Я работаю над устаревшим приложением под управлением php 5.3, и по какой-то причине на рабочем сервере PDF-файлы печатаются на тарабарщине прямо в браузер, а не загружаются.

Тарабарщина, напечатанная в браузере

Ничего не изменилось, и в разработке все по-прежнему работает нормально.

По какой-то причине на сервере prod ответ все равно возвращается Content-Type: text/html .

Вот код:

 public function downloadPdf($file) {  header('Content-Description: File Transfer');  header('Content-Type: application/pdf');  header('Content-Disposition: attachment; filename="FILENAME.pdf"');  header('Content-Transfer-Encoding: binary');  header('Expires: 0');  header('Cache-Control: must-revalidate, post-check=0, pre-check=0');  header('Pragma: public');  header('Content-Length: ' . filesize("$file"));  ob_clean();  flush();  readfile($file);  exit(); }  

Я прочитал здесь множество руководств и вопросов по переполнению стека, но в моем случае ничего не сработало.

Я попытался изменить: Content-Type: application/pdf на Content-Type: application/octet-stream

Content-Disposition: attachment; Для Content-Disposition: inline;

Проверил, можно ли прочитать файл is_readable() , и это так.

Изменено readfile($file); на echo file_get_contents($file)

С и без exit()

Попробовал добавить ob_clean() и flush() перед установкой заголовков.

У меня ничего не получалось. Я что-то упускаю? Я не могу понять, что все работает на сервере разработчиков, хотя все идентично.

Комментарии:

1. Вы проверили, какие заголовки на самом деле выводятся сервером, когда это происходит? Используйте инструменты разработчика вашего браузера, чтобы проверить…предположительно, в среде что-то изменилось, что заставляет ее делать не то, что вы ожидали.

2. Да, вы правы, и я забыл упомянуть, что на самом деле реакция немного иная. В dev это то же самое, что и в запросе Content-Type: application/pdf , но в prod оно изменено на Content-Type: text/html . Но все равно я понятия не имею, почему это происходит.

3. А как насчет остальных заголовков, они присутствуют? Включена ли правильная отчетность об ошибках PHP, и вы проверили, что говорится в журнале ошибок?

4. Я проверил журнал ошибок, и да, похоже, что какая-то другая функция отправляет заголовки до того, как я установлю их в загрузке PDF. Спасибо вам за вашу помощь.