目的:使用php将命令直接输入到minecraft服务器控制台
我试图使用php脚本(从浏览器运行)来执行()shell脚本。当我从终端运行PHP时,它的工作原理!但是在浏览器中,没有任何反应。
exec('sudo -u root sh /home/minecraft/whitelist-reload.sh', $out, $ret_val);
从终端运行时,我得到一个“数组0”,但浏览器给我一个“数组1”
问题是什么? 并且一旦我运行shell,那么工作之后的所有内容都不应该就像你在终端上一样吗?(shell脚本里面的内容是否重要?)
shell具有所有rx权限,并且作为
位于sudoers文件中www-data ALL = NOPASSWD: /home/minecraft/whitelist-reload.sh
答案 0 :(得分:2)
问题是,您在终端上以可能具有sudo
权限的用户身份运行脚本,而apache / webserver用户则没有,因此$ret_val
(实际上是只是一个状态代码)设置为1(意味着错误)。
在这两种情况下尝试var_dump($out);
以查看您的exec调用的结果。要从浏览器中执行此类操作,您可能需要查看proc_open
和系列,或者有一个chmod到777的脚本,因此apache用户也可以运行它。然后让该脚本调用实际的shell脚本并返回它的输出。但这非常危险,只能用于测试您自己机器上的环境。永远不要在生产环境中这样做!
我在这里发布了一些问题,可能会提供信息:
opening a second shell, and load profile variables AND call another script
答案 1 :(得分:0)
原来......在将www-data输入到sudoers文件后,我需要做的就是在它之后使用“-u root”