php - 为什么 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();
解决方案
问题是 PHP 应用程序在较早的时候使用了 ob_start(),所以 readfile() 的输出落在了内存中,超出了它的限制。
推荐阅读
- sql - SQL Server 使 varbinary(8000) 成为主键
- python-3.x - 为什么录制文件在python中是空的
- node.js - 聚合匹配的MongoDB查找返回一个空数组
- python - Groupby 值如何计算 pandas 数据帧?
- c# - 使用 Pushsharp C# 的 IOS MDM 推送通知问题
- c# - Elasticsearch - 嵌套 - 映射 - 多目标别名或仅指定 1 个多字段子字段以用于每个文档
- javascript - Google Places Javascript Api 照片重定向到照片网址但返回 403
- android - invalidateOptionsMenu 未触发 onPrepareOptionsMenu()
- linux - 从文件中提取一个单词并将文件另存为该单词
- c# - 如何使用 c# 中的 pfx 文件中的证书对 JWT 令牌进行签名/取消签名?