我正试图用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");
试试看。