从PHP运行shell命令 - 具有root权限或sudo

时间:2011-10-07 15:16:05

标签: php linux root sudo

我会解释我正在尝试做什么,因为有人可能会采用一种更好,更完全不同的方法。

我正在尝试安装FFMPEG,但不仅仅是安装它,我正在制作一个安装了一些PHP脚本的自动安装程序,如果还没有安装,还会安装FFMPEG。

我找不到任何可以安装FFMPEG的自动PHP脚本,所以我猜这比我想象的更难。

我有3个选项可以做到这一点:

  • 使用exec函数从服务器上的源代码构建,这个 需要root权限。
  • 找到一个预编译的FFMPEG二进制文件,轻松完成,我做到了,但是 然后我意识到它没有正确的编解码器,所以没有工作。
  • 使用YUM或APT-GET安装FFMPEG,这会很棒但是它 需要root权限。

那么,我怎么能:

使用PHP中的YUM / APT-GET并设置sudo

OR

编译后为FFMPEG安装编解码器。使用我发现的预编译二进制文件,如果有可能,那么我可以安装丢失的编解码器(我认为是lame mp3。也许其他人也是如此)。或者编解码器需要构建到二进制文件中。

我认为首选的选项是使用YUM / APT-GET,因为我的目标主要是Centos 5,也可能是Ubuntu。

2 个答案:

答案 0 :(得分:0)

如果使用SSH,

sudo in php会容易得多。除此之外,您还可以使用“expect”等待相应的提示。如果有一种方法可以使用内置的exec()或system(),那我就不知道了。

答案 1 :(得分:0)

如果您最终从源代码编译或从repo安装,您可以通过此项目处理安装过程,该项目允许PHP获取真正的Bash shell并与之交互。在此处获取:https://github.com/merlinthemagic/MTS

下载后,您只需使用以下代码:

$shell    = \MTS\Factories::getDevices()->getLocalHost()->getShell('bash', true);
$return1  = $shell->exeCmd('yum -y install FFMPEG');
//the return will be a string containing the return of the command
echo $return1;

当需要接受GPG密钥或依赖项存在冲突时,您需要处理边缘情况。但是该项目允许您编写所有Bash交互的脚本。