PHP эхо-файл в виде текста вместо двоичного файла на сервере - PullRequest
0 голосов
/ 23 мая 2018

Я написал страницу PHP, которая читает файл и выводит его после добавления некоторых заголовков:

header('Content-disposition: filename="' . $fname . '"');
header('Pragma: no-cache');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header("Content-type: $AttachFileType");
header("Content-Transfer-Encoding: binary");
header("Content-Length: " . filesize($ffullname));
echo file_get_contents($ffullname);

Этот фрагмент кода хорошо работает при локальном тестировании, но при переносе на сервер ответне так, как ожидалось.Например, когда я хочу получить png-файл, я получаю следующее изображение при локальном тесте:

local output

, в то время как тест сервера выводит этот файл:

server output

Как я уже исследовал, единственное их отличие - это 4 дополнительных заголовка при ответе сервера.Заголовки локальных тестовых ответов:

Cache-Control: must-revalidate, post-check=0, pre-check=0
Connection: Keep-Alive
Content-disposition: filename="attachment_hrmstotal_generalskills_6.png"
Content-Length: 2401
Content-Transfer-Encoding: binary
Content-Type: png
Date: Wed, 23 May 2018 04:45:02 GMT
Expires: 0
Keep-Alive: timeout=5, max=97
Pragma: public
Server: Apache/2.4.27 (Ubuntu)

и заголовки ответов сервера:

Cache-Control: must-revalidate, post-check=0, pre-check=0
Connection: keep-alive
Content-disposition: filename="attachment_hrmstotal_generalskills_1.png"
Content-Length: 184450
Content-Transfer-Encoding: binary
Content-Type: png
Date: Wed, 23 May 2018 04:40:56 GMT
Expires: 0
Pragma: public
Server: nginx/1.8.0
Strict-Transport-Security: max-age=31536000
X-Content-Type-Options: nosniff
X-Frame-Options: SAMEORIGIN
X-XSS-Protection: 1; mode=block

Последние четыре заголовка - это разница.В чем проблема, ее причина и как ее решить?

1 Ответ

0 голосов
/ 27 мая 2018

Ваш тип контента должен быть Content-type: image/png

...