为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

桃花长相依 2018-11-13 22:43:55
我使用 命令 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 anywhereroot ALL=(ALL) ALLnginx ALL=(ALL) ALL保存后, reboot重启 但是也没有用啊。网上很多人出现这个问题,我就没看到有用的解决方案。还望知道的给个答案吧!!!
查看完整描述

2 回答

?
波波你行

TA贡献1条经验 获得超0个赞

查看完整回答
反对 回复 2019-01-07
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

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

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


查看完整回答
反对 回复 2018-11-13
  • 2 回答
  • 0 关注
  • 2138 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信