#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. Спасибо вам за вашу помощь.