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. 您实际得到的结果?

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

《L05 电商实战》
从零开发一个电商项目,功能包括电商后台、商品 & SKU 管理、购物车、订单管理、支付宝支付、微信支付、订单退款流程、优惠券等
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
讨论数量: 9

应该是 readfile($fileName);把

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

php 默认缓冲区 4k 大小

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

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

2年前 评论

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

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

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