首页 > 解决方案 > 为什么 nginx 在我的 PHP 文件下载时返回 403?

问题描述

我将 nginx 1.14.1 与 PHP 一起使用,但我遇到的调用问题应该会导致文件下载。

PHP 应用程序产生一个状态码为 200 的响应,并且文件内容被转储在正文中,但从 nginx 我得到以下答案(头)

HTTP/2 403 
server: nginx/1.14.1
date: Tue, 23 Apr 2019 07:19:19 GMT
content-type: text/html; charset=UTF-8
vary: Accept-Encoding
x-powered-by: PHP/7.2.17
strict-transport-security: max-age=31536000

我的 PHP 应用程序生成的标头不包含在 nginx 响应中。

Firefox 产生错误“/Users/myuser/Downloads/NBPKD9pN.mp4.part 无法保存,因为无法读取源文件。请稍后再试,或联系服务器管理员。”

应下载的文件大小约为 1 GB。

PHP 应用程序的其余部分工作正常(不会导致 403)。

提供我的完整 nginx 配置是否有帮助?

当我将同一个文件放入 Web 根目录并直接调用它(不使用 PHP)时,下载工作正常。

编辑: PHP 代码大致如下所示:

header('Content-Type: video/mp4');
header('Content-Disposition: attachment; filename="' . $filename . '"');
header('Content-Length: ' . $filesize));
readfile($file);
die();

标签: phpnginx

解决方案


问题是 PHP 应用程序在较早的时候使用了 ob_start(),所以 readfile() 的输出落在了内存中,超出了它的限制。


推荐阅读