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


Allow PHP/Apache to shell_execute commands on Ubuntu

我正试图用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脚本执行所有命令。

有人知道该怎么办吗?

你读过吗http://php.net/manual/en/function.shell-exec.php

评论部分有相当多的讨论。热门评论是:

如果您试图在shell_exec中运行诸如"gunzip-t"之类的命令并得到一个空结果,则可能需要添加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打印其他内容。希望这能为其他人节省一两个小时。

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

试试看。