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

发布于 2022-09-11 14:50:52 字数 504 浏览 12 评论 0

我使用 命令
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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

箹锭⒈辈孓 2022-09-18 14:50:52

将shell_exec函数的执行结果打印出来,如果函数执行过程中发生错误,再针对具体错误进行解决

1.在php文件中添加执行代码
shell_exec("ffmpeg -i /home/video/a.mp4 -r 1 -s 950x520 -f image2 /home/video/a.jpg 2>&1");
2.用浏览器访问PHP文件,查看页面输出
守护在此方 2022-09-18 14:50:52

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 **** ,当然这命令具体全路径是什么你要自己找找。

多找找原因即可,希望对你有帮助,之前是审题不清 @孤狼独闯天宇

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文