You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP实现MP4文件下载后无法播放及文件大小异常问题求助

解决PHP下载MP4文件仅几字节且无法播放的问题

我一眼就揪出你代码里的几个关键问题,这就是下载文件只有几字节、完全没法播放的根源:

问题1:readfile的路径完全错了

你明明定义了完整文件路径$filepath = "/www/servermedia/technounion.mp4",但最后调用readfile($filename)时,用的是basename提取的短文件名——PHP会在当前脚本的工作目录下去找这个文件,而不是你存放视频的/www/servermedia/目录,自然找不到原文件,只能返回空内容,下载的文件就只有几字节。

问题2:Content-Disposition的语法错误

你写的header("Content-Disposition: attachment; filename=.$filename");里,filename=.$filename多了一个多余的点,这会导致下载后的文件名变成.technounion.mp4(带个前缀点),虽然这不是文件无法播放的直接原因,但也是个低级语法错误。

修复后的完整可用代码

<?php
// 先清空输出缓冲区,避免之前的空格/换行干扰header发送
ob_clean();
flush();

$filepath = "/www/servermedia/technounion.mp4";
$filename = basename($filepath);

// 先检查文件是否存在且可读,提前拦截错误
if (!file_exists($filepath) || !is_readable($filepath)) {
    die("错误:目标文件不存在或无法读取");
}

// 设置正确的响应头
header("Content-Type: video/mp4");
// 用双引号包裹文件名,避免文件名含特殊字符时出问题
header("Content-Disposition: attachment; filename=\"$filename\"");
// 告诉浏览器文件实际大小,提升下载体验
header("Content-Length: " . filesize($filepath));

// 用完整路径读取文件并输出
readfile($filepath);
exit;
?>

额外要注意的点

  • 确保PHP进程对/www/servermedia/目录有读取权限,否则readfile还是没法访问文件。
  • 脚本开头绝对不能有空格、换行或者echo输出,不然header函数会直接报错,响应头设置失败后浏览器也没法正确识别文件。

内容的提问来源于stack exchange,提问作者ac-programmer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 14:22:48