在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重启 但是也没有用啊。
网上很多人出现这个问题,我就没看到有用的解决方案。还望知道的给个答案吧!!!
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
将shell_exec函数的执行结果打印出来,如果函数执行过程中发生错误,再针对具体错误进行解决
1.在php文件中添加执行代码
2.用浏览器访问PHP文件,查看页面输出
1、
应该还是权限问题。
在浏览器使用 php 执行 exec 的这个用户,能不能执行 ffmpeg 这个命令,这很关键。
看你提到了 nginx ,我猜测可能是 nginx + php-fpm ,那么就要看 php-fpm 的执行用户有么有权限了,而不是 nginx 。
2、
可以查看运行的错误信息嘛。
比如改成
3、
再往下说,一个可能是原因是
sh: ffmpeg: command not found
,那么就不是权限的问题了,是 nginx 用户找不到这个命令,也就是nginx用户的 $PATH 这个环境变量里找不到这个命令,这时可以把命令路径写全即可比如
/usr/bin/ffmpeg ****
,当然这命令具体全路径是什么你要自己找找。多找找原因即可,希望对你有帮助,之前是审题不清 @孤狼独闯天宇