使用 header() 函数设置 content-type、content-disposition 和 content-length,并通过 readfile() 输出文件内容即可实现强制下载。核心在于根据文件后缀自动匹配 mime 类型,确保浏览器正确识别文件并触发下载行为而非直接预览。

如何根据文件后缀自动判断MIME类型
通过 mime_content_type() 函数或手动维护后缀映射表可以实现自动判断。推荐使用 mime_content_type(),它基于系统配置自动检测,若不可用则回退到自定义映射逻辑。

$file = 'example.pdf';
$mime = mime_content_type($file);
if (!$mime) {
$ext = pathinfo($file, PATHINFO_EXTENSION);
$mimes = ['pdf' => 'application/pdf', 'jpg' => 'image/jpeg'];
$mime = $mimes[$ext] ?? 'application/octet-stream';
}
header('Content-Type: ' . $mime);
如何确保文件被强制下载而非预览
设置 Content-Disposition: attachment 头信息是强制下载的关键。同时需清除输出缓冲区并关闭短标签,防止意外输出导致文件损坏。配合 Content-Length 提升传输稳定性。

header('Content-Disposition: attachment; filename="' . basename($file) . '"');
header('Content-Length: ' . filesize($file));
readfile($file);
当文件不存在时程序如何处理
在调用 readfile() 前必须检查文件是否存在且可读。若文件缺失,应抛出异常或返回 HTTP 404 状态码,避免输出空白文件或错误信息。这是生产环境中的必要防御措施。
php免费学习视频:立即使用
踏上前端学习之旅,开启通往精通之路!从前端基础到项目实战,循序渐进,一步一个脚印,迈向巅峰!











