猿问

在Linux上,php文件里的exec()执行失败,是什么原因呢?

我使用 命令 
ffmpeg -i /home/video/a.mp4 -r 1 -s 950x520 -f image2 /home/video/a.jpg
在终端运行可以执行,
但是在PHP文件里,我通过浏览器运行
exec('ffmpeg -i /home/video/a.mp4 -r 1 -s 950x520 -f image2 /home/video/a.jpg')却没有执行成功,
网上百度说是权限问题,于是测试,

echo shell_exec('ls') 可以执行
echo shell_exec('whoami') 显示 nginx

于是vim /etc/sudoers 添加了

Allow root to run any commands anywhere
root ALL=(ALL) ALL
nginx ALL=(ALL) ALL

保存后, reboot重启 但是也没有用啊。
网上很多人出现这个问题,我就没看到有用的解决方案。还望知道的给个答案吧!!!


桃花长相依
浏览 2139回答 2
2回答

波波你行

php-fpm linux环境使用exec函数调用ffmpeg,报错ffmpeg: command not found的解决方法可以参考这篇文章

陪伴而非守候

1、应该还是权限问题。 在浏览器使用 php 执行 exec 的这个用户,能不能执行 ffmpeg 这个命令,这很关键。 看你提到了 nginx ,我猜测可能是 nginx + php-fpm ,那么就要看 php-fpm 的执行用户有么有权限了,而不是 nginx 。2、可以查看运行的错误信息嘛。比如改成exec("ffmpeg -i /home/video/a.mp4 -r 1 -s 950x520 -f image2 /home/video/a.jpg 2>&1 ",$error);3、再往下说,一个可能是原因是 sh: ffmpeg: command not found ,那么就不是权限的问题了,是 nginx 用户找不到这个命令,也就是nginx用户的 $PATH 这个环境变量里找不到这个命令,这时可以把命令路径写全即可比如 /usr/bin/ffmpeg **** ,当然这命令具体全路径是什么你要自己找找。多找找原因即可,希望对你有帮助,之前是审题不清 @孤狼独闯天宇
随时随地看视频慕课网APP

相关分类

Html5
我要回答