PHP readfile (), который сохраняет MIME-тип - PullRequest
1 голос
/ 10 мая 2019

Я пытаюсь настроить PHP-скрипт, который может извлекать файлы (для проверенных пользователей) из папки за пределами живого веб-корня.Проблема в том, что при этом, даже если я использую правильный заголовок «Content-Type», файл загружается как application/octet-stream.Это имеет последствия для безопасности, если пользователь позже попытается повторно загрузить загруженный файл, так как он будет обнаружен как приложение, даже если это действительно PDF-файл (мое приложение позволяет загружать только определенные типы MIME).

Это то, что я использую для загрузки файла в браузер:

$secret_file = "../attach/1/test.pdf";

header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private", false);
header("Content-Type: ".mime_content_type($secret_file));
header("Content-Disposition: inline; filename=\"test.pdf\";");
header("Content-Transfer-Encoding: binary");
readfile($secret_file);

Интересно, что если я загружаю файл таким образом через браузер и просматриваю его свойства в linux, он отображается как «application /PDF».Однако, если я проверяю тот же файл с помощью функции PHP mime_content_type(), он читается как application/octet-stream.

. Я подтвердил, что проверка исходного файла таким образом (до того, как он был извлечен через readfile) показывает егоas application/pdf.

Есть ли способ использовать readfile() без изменения типов пантомимы?Или, возможно, есть лучшая альтернатива?

РЕДАКТИРОВАТЬ

Отвечая на несколько вопросов из комментариев:

  1. Инструменты разработчика в Firefox сообщают, чтовстроенный файл имеет заголовок Content-Type: application/pdf.
  2. sha256sum загруженного файла не соответствует исходному файлу.Но как можно использовать readfile() (или аналогичный) без изменения файла?
...