PHP readfile()保留mime类型

时间:2019-05-10 20:20:50

标签: php mime-types

我正在尝试建立一个PHP脚本,该脚本可以从实时Webroot之外的文件夹中提取文件(供已验证的用户使用)。问题在于,即使执行此操作,即使我使用正确的“ 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提取之前)将其显示为application/pdf

是否可以使用readfile()而不更改mime类型?或者,也许有更好的选择吗?

编辑

回答评论中的一些问题:

  1. Firefox中的开发人员工具报告说,内联文件具有Content-Type: application/pdf标头。
  2. 已下载文件的
  3. sha256sum与原始文件不匹配。但是如何在不更改文件的情况下使用readfile()(或类似名称)?

0 个答案:

没有答案