从php执行一个需要root的命令

时间:2017-08-07 09:48:35

标签: php ffmpeg centos sudo

我想找到解决这个问题的方法:我有一个图像列表,我希望将其转换为服务器上的视频。我已经创建了一个带有centOS的虚拟机并安装了ffmpeg来测试它。当我在终端输入这条线时,一切运作良好

sudo ffmpeg -r 10 -i img%03d.png -c:v libx264 -preset veryslow -crf 0 
video.mp4

我想要的是在点击按钮时调用它。这是代码:

使用Javascript:

$(document).ready(function(){
    $("#ffmpeg").click(function(){
        $.get('ffmpegBooklet.php', function (data) {
            console.log(data);
       });
    });
});

PHP:

echo shell_exec("/usr/local/bin/ffmpeg  -r 10 -i /img%03d.png -c:v 
libx264 -preset veryslow -crf 0 video.mp4 2>&1");

我在浏览器的控制台中得到的是: 来自ffmpeg和最后的日志 - >许可被拒绝

我尝试过静态构建(在互联网上阅读后),但我遇到了同样的问题。没有sudo权限,有没有解决办法呢?我不想这样做sudo或一些棘手的命令通过php给sudo权限因为我觉得它不安全。

欢迎任何帮助!感谢您阅读:)

1 个答案:

答案 0 :(得分:0)

修正了这样。谢谢你的帮助。

我禁用SELinux只是为了检查发生了什么。 FFmpeg通过php工作就像一个魅力。我检查了创建的文件,所有者和组是apache:apache。首先,我已经更改了输入和输出文件夹的所有者并设置了apache。然后我给了apache的权利。我打开了SELinux并再次获得了许可问题。我找到了这个解决方案,解决了我的问题:

# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html(/.*)?'

# restorecon -R /var/www/html

我还将我的个人资料添加到apache组,因为我无法再访问该文件夹了。

现在一切正在与SELinux ON合作,这让我很满意。 FFmpeg / apache不再被阻止了!