FFMPEG本地及终端运行正常 线上网站调用失效问题求助
问题排查步骤
确认FFMPEG执行权限
先在线上服务器终端执行ls -l /usr/bin/ffmpeg查看文件权限,再切换到PHP运行用户(通常为www-data、apache、nginx)测试执行:sudo -u www-data /usr/bin/ffmpeg -version如果没有正常输出版本信息,需要给ffmpeg添加执行权限:
chmod +x /usr/bin/ffmpeg。检查相对路径问题
代码中使用./videos/相对路径可能因为PHP运行时工作目录异常导致找不到输出目录,建议替换为绝对路径:// 原相对路径写法 // exec('/usr/bin/ffmpeg -i "' . $uploaded_file . '" -c:v libx264 "./videos/' . $video_mp4 . '" -y 1>2>&1'); // 替换为绝对路径 exec('/usr/bin/ffmpeg -i "' . $uploaded_file . '" -c:v libx264 "/var/www/html/NAME_OF_WEBSITE/videos/' . $video_mp4 . '" -y 1>2>&1');同时确认
/var/www/html/NAME_OF_WEBSITE/videos/目录存在,且PHP运行用户有写入权限。捕获执行错误信息
修改代码打印命令执行的返回值和输出内容,定位具体报错原因:$cmd = '/usr/bin/ffmpeg -i "' . $uploaded_file . '" -c:v libx264 "/var/www/html/NAME_OF_WEBSITE/videos/' . $video_mp4 . '" -y 2>&1'; exec($cmd, $output, $return_code); // 输出调试信息,执行成功return_code为0 print_r($output); echo $return_code;检查PHP禁用函数
查看线上php.ini配置中的disable_functions项,确认exec函数没有被禁用,若被禁用需要从禁用列表中移除,重启PHP服务后生效。确认libx264编码支持
在线上终端执行ffmpeg -encoders | grep libx264,如果无结果输出,说明当前ffmpeg版本未编译H.264编码支持,需要重新安装带libx264组件的ffmpeg版本。
内容的提问来源于stack exchange,提问作者margie
相关产品推荐
相关产品推荐

