PHP文件不能变成MP4,它只是调用ffmpeg等工具在服务器端生成MP4的控制脚本;手机仅发起请求并接收结果,所有视频处理必须在服务端完成。
PHP 文件本身不能“变成” MP4,它只是服务器端脚本,不包含视频数据。所谓“手机打开 PHP 文件转 MP4”,实际是访问一个 PHP 脚本,该脚本在服务器上执行视频处理(如调用 ffmpeg),生成 MP4 文件并返回给手机下载或播放。
用户常误以为 PHP 文件里写了视频数据,其实它只是控制逻辑。真正的视频生成依赖外部工具和输入源:
$_GET['url'] 或 $_POST['input'] 提供原始视频地址(如 MP4、MOV、在线流)或 base64 数据exec("ffmpeg -i {$input} -c:v libx264 -c:a aac output.mp4 2>&1", $output, $return_code)
ffmpeg,且 PHP 进程有执行权限和磁盘写入权限readfile() 或重定向响应头供手机下载,例如设置 Content-Type: video/mp4
header('Content-Type: video/mp4');
header('Content-Disposition: attachment; filename="output.mp4"');
readfile('/tmp/output.mp4');
手机浏览器或 WebView 访问 PHP 地址后没反应、报错或只显示空白,多数不是代码问题,而是环境限制:
set_time_limit(300) 可延长,但更推荐异步生成 + 轮询状态ffmpeg 崩溃:安卓/iOS 无法直连服务器执行命令,所有处理必须在服务端完成;手机只负责发起请求和接收结果http://example.com/output.mp4),iOS Safari 会拒绝加载header("Access-Control-Allow-Origin: *")
安卓和 iOS 不支持原生 PHP 解释器,也没有预装 ffmpeg。即使使用 Termux(安卓)或 iSH(iOS)这类模拟环境:
php 和 ffmpeg,但处理 1080p 视频极易 OOM 或超时ffmpeg 编译困难,不支持硬解加速/tmp 不可写).php 文件不要试图让手机“运行 PHP”,而是搭建一个轻量服务端,由手机发请求、服务器干活、再把 MP4 推回来:
ffmpeg 的 Linux 主机或云函数(如腾讯云 SCF 支持自定义层带 ffmpeg)POST 的视频 URL 或 base64 字符串,校验后生成唯一任务 IDproc_open() 启动 ffmpeg 并捕获进度,避免阻塞 Web 请求/status?id=xxx 获取生成状态
,成功后跳转到 /download?id=xxx
./uploads/ 并通过 readfile() 输出,不暴露真实路径核心点始终只有一个:PHP 是调度员,不是工人;MP4 只能由 ffmpeg 或类似编码器产出,而它们不在手机上。