

新闻资讯
技术学院改后缀不能使PHP文件变成可播放的MP4,因其二进制结构不符合MP4格式;正确做法是PHP输出真实MP4数据并设置Content-Type: video/mp4等响应头,支持Range请求以确保兼容性。
单纯把 .php 文件重命名为 .mp4,它不会变成视频,也无法被播放器打开——因为文件扩展名只是操作系统和应用的“提示”,不改变实际内容。
浏览器或播放器看到 .mp4 后缀,会直接按 MP4 容器格式解析二进制数据。而 PHP 文件本质是纯文本(含 PHP 代码),其字节流完全不符合 MP4 的 ftyp、moov、mdat 等结构要求。结果就是:播放器读几字节就报错,常见错误如 Invalid data found when p(ffmpeg 报错)或“无法识别的格式”。
rocessing input
核心不是改后缀,而是让 PHP 正确生成/转发 MP4 数据,并设置恰当的 HTTP 响应头:
readfile() 读取真实 MP4 文件,或用 FFmpeg 动态生成)Content-Type 和 Content-Length
ob_end_clean() 或提前关闭缓冲header('Content-Type: video/mp4');
header('Content-Length: ' . filesize('/path/to/video.mp4'));
header('Accept-Ranges: bytes');
readfile('/path/to/video.mp4');
这是常见需求(比如做权限控制、防盗链)。关键点在于:URL 可以是 /video.php?id=123,但服务端必须按 MP4 协议支持分段请求(Range 请求),否则 iOS Safari 或部分播放器会卡住或报错:
Range: bytes=0- 头$_SERVER['HTTP_RANGE'] 解析起始偏移,只输出对应片段206 Partial Content,并带上 Content-Range 头X-Accel-Redirect)代理真实 MP4,PHP 只做鉴权真正要让“PHP 输出可播放的 MP4”,重点永远在内容生成与 HTTP 协议合规性,而不是文件后缀。后缀改得再像,也骗不过播放器对字节流的校验。