PHP 7.4 文件下载失败

1. 运行环境

PHP 7.4

output_buffering = On
output_buffering = 4096

开发本地使用 docker 环境测试过可以正常下载,但服务器环境没有使用docker。不知道是否和 PHP 安装有关系

2). 当前使用的 php/php-fpm 版本?

PHP 版本:7.4
php-fpm 版本:7.4

3). 当前系统

CentOS7

4). 业务环境

生产环境

5). 相关软件版本

nginx version: nginx/1.16.1

2. 问题描述?

无法正确下载文件。
能弹出文件下载,但文件总数下载中断或者下载到的文件大小不对。
经检查,readfile 是可以正常读取到文件的。文件权限也没问题。

下载的代码如下:

$asset = 获取到的文件信息

ob_start();

$filename = $asset['filename'];
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="'.$filename.'"');
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . $asset['filesize']);
ob_clean();
ob_end_flush();
readfile($file);
exit();

3. 您期望得到的结果?

文件正常下载

4. 您实际得到的结果?

没有报错信息,但文件无法正常下载。

《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 9

应该是 readfile($fileName);把

2年前 评论
MustangZhong (楼主) 2年前
pardon110

php 默认缓冲区 4k 大小

2年前 评论
MustangZhong (楼主) 2年前
MustangZhong (楼主) 2年前

可以用Storage::download()下载试试

2年前 评论

有人遇到过这个神奇的问题么。。。

2年前 评论
Yellowinner 1年前
MustangZhong (作者) (楼主) 1年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!