我有一个运行一个Minecraft服务器的TMUX会话,我正在为服务器创build一个Web界面。
目前我有以下文件:
command.sh
#!/bin/bash tmux send-keys -t minecraft Cz "$@" Enter
的index.php
<?PHP if($_POST) { $commandString = $_POST['inputCommand']; $output = shell_exec('./command.sh $commandString'); echo "<pre>$output</pre>"; } ?> <form method="post"> <input type="text" name="inputCommand" placeholder="Type Command"/> <input type="submit" value="Execute" /> </form>
command.sh在terminal中工作,我可以使用所有的标准命令
./command.sh "/help"
但是我不能使用上面的方法从php执行这个脚本。 我已经将www-data和www-user都添加到了sudoers中,并尝试过
shell_exec('sudo ./command.sh $commandString')
但是,这也没有奏效。
当点击提交button时,输出被回显,但是是空白的。
有人可以帮忙指出我的脚本执行方法出错了吗?
编辑我已经采取了两个截图,之前和之后进一步澄清。
command.sh
有问题,并输出一些东西给stderr。 shell_exec
只返回给你的标准输出,所以你没有看到错误。 尝试将“2>&1”附加到命令的末尾,例如
$output = shell_exec('./command.sh $commandString 2>&1');
这将发送stderr到标准输出,让你看看发生了什么。 调试问题后,请删除“2>&1”。 正如在评论中指出的那样,我想实际的问题是你使用单引号,这意味着$ commandString被逐字解释。 试试双引号!
警告!!! 这真的不安全。 您将从POST获取的unsanitized参数传递给以sudoers中的用户身份运行的命令。 无论两个登录屏幕,你应该消毒你的输入。