如何解决FFmpeg在网站服务器上无法运行的问题?
解决FFmpeg在网站部署后无法运行的问题
核心问题排查与修复
匹配服务器系统的FFmpeg版本
你上传的是ffmpeg.exe这类Windows可执行文件,但服务器路径/home/mywebsitename/...明显是Linux系统,Linux根本跑不了Windows的exe文件。得下载对应Linux架构的FFmpeg二进制文件(比如x86_64版本),替换掉当前的exe文件,文件名改成ffmpeg(不带.exe后缀),再给它加执行权限:chmod +x /home/mywebsitename/public_html/ffmpeg捕获命令执行的错误信息
当前用的system()函数只能返回退出状态,看不到FFmpeg的具体报错。换成exec()来捕获输出和错误,方便排查问题:<?php ini_set ('display_errors', 1); ini_set ('display_startup_errors', 1); error_reporting (E_ALL); $image1 = "/home/mywebsitename/public_html/uploads2/1.png"; $image2 = "/home/mywebsitename/public_html/uploads2/2.png"; $ffmpeg = "/home/mywebsitename/public_html/ffmpeg"; $command = $ffmpeg." -i ".$image1." -vf scale=100:-2 ".$image2; // 捕获执行输出和错误 exec($command . ' 2>&1', $output, $return_var); echo "退出状态:".$return_var."<br>"; echo "输出信息:<pre>".print_r($output, true)."</pre>"; ?>这样能直接看到FFmpeg运行时的具体问题,比如缺依赖、路径错了之类的。
检查FFmpeg依赖库
Linux版FFmpeg可能依赖系统里的库,比如libssl、libavcodec,要是缺这些库就跑不起来。可以用下面的命令查依赖:ldd /home/mywebsitename/public_html/ffmpeg输出里要是有
not found的库,要么联系主机商装对应的包,要么直接下载静态编译版FFmpeg——静态版自带所有依赖,不用依赖系统库。确认路径与权限细节
虽然设了777,但得确认:uploads2目录确实存在,而且PHP进程能往里面写文件(有些主机对PHP的写入范围有限制,777也不一定管用)- 输入的
1.png真的在指定路径里,别写错文件名或路径(可以用file_exists($image1)先验证一下)
额外优化建议
- 别直接拼命令字符串,容易有注入风险,用
escapeshellarg()处理路径更安全:$command = $ffmpeg." -i ".escapeshellarg($image1)." -vf scale=100:-2 ".escapeshellarg($image2); - 很多Linux主机本身就自带FFmpeg,你可以用
which ffmpeg查它的路径,直接用这个系统路径就行,不用自己上传。要是主机禁用了自定义二进制文件,直接联系主机商确认能不能开权限。
内容的提问来源于stack exchange,提问作者Sam Cordin
相关产品推荐
相关产品推荐

