使用 header() 函数设置响应头并配合 readfile() 即可实现强制下载。核心做法是发送 content-type: application/octet-stream、content-disposition: attachment 以及 content-length,随后输出文件内容。

Content-Disposition 的格式要求是什么
该头部必须包含 attachment 关键字以指示浏览器下载,文件名需使用 filename= 指定。若文件名含中文或特殊字符,应使用 RFC 5987 标准的 filename*=UTF-8''... 格式以确保兼容性。

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="report.txt"');
header('Content-Length: ' . filesize('data.txt'));
readfile('data.txt');
Content-Length 缺失会导致什么问题
缺少长度头时,部分浏览器可能无法正确显示下载进度,或在流式传输中提前截断文件。显式设置可确保客户端准确接收完整数据。
立即学习“PHP免费学习笔记(深入)”;

header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename="test.txt"');
header('Content-Length: 0');
echo '';基于程序中某个输入、条件或结果的具体问题
当文件不存在时,filesize() 会触发警告且 readfile() 返回 false。应在调用前检查文件存在性,避免错误输出混入下载流。



















