允许PHP / Apache在Ubuntu上执行shell_execute命令

时间:2015-02-20 23:21:15

标签: php apache shell-exec

我正在尝试使用shell_exec通过PHP执行命令。 PHP文件由Apache托管在我的Ubuntu服务器上。

当我运行时:

echo shell_exec("ps ax | grep nginx");

然后我会看到数据。但是当我运行另一个命令时,例如:

echo shell_exec("cat /usr/local/nginx/config/nginx.config");

然后它根本没有显示任何东西。但是,当我复制该命令并将其粘贴到我的终端中时,它会正常执行。

我的Apache服务器以用户www-data运行。所以我编辑了sudoers并添加了这一行:

www-data ALL=(ALL:ALL) ALL

我知道这是一个安全风险,但我想确保(目前)www-data能够执行所有命令。但是,由于某种原因,我仍然无法使用我的PHP脚本执行所有命令。

任何人都知道该怎么做?

2 个答案:

答案 0 :(得分:0)

您是否阅读了http://php.net/manual/en/function.shell-exec.php

评论部分有很多讨论。热门评论是:

  

如果您正在尝试运行" gunzip -t"等命令。在shell_exec中获取空结果,您可能需要在命令末尾添加2>& 1,例如:

     

永远不会工作:   echo shell_exec(" gunzip -c -t $ path_to_backup_file");

     

应该工作:   echo shell_exec(" gunzip -c -t $ path_to_backup_file 2>& 1");

     

在上面的示例中,gunzip输出开头的换行符似乎阻止了shell_exec打印其他任何内容。希望这可以节省一两个小时的其他人。

答案 1 :(得分:0)

echo shell_exec(" sudo cat /usr/local/nginx/config/nginx.config");

试试。