我有一个运行Minecraft服务器的TMUX会话,我正在为服务器创建一个Web界面。
目前我有以下文件:
command.sh
#!/bin/bash
tmux send-keys -t minecraft C-z "$@" 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在终端中工作,我可以按照
的方式使用所有标准命令 ./command.sh "/help"
但是我无法使用上述方法从php执行此脚本。我已将www-data和www-user添加到sudoers并尝试
shell_exec('sudo ./command.sh $commandString')
但这也没有奏效。
单击提交按钮时,将回显输出,但它是空白的。
有人可以帮忙指出我执行脚本的方法出错了吗?
<小时/> 的修改 我已经拍了两个截图,一个在前,一个在后面进一步澄清。
答案 0 :(得分:9)
command.sh
遇到问题并向stderr输出内容。 shell_exec
只返回给你stdout,所以你没有看到错误。尝试附加&#34; 2&gt;&amp; 1&#34;到你的命令结束,如
$output = shell_exec('./command.sh $commandString 2>&1');
这会将stderr发送到stdout,让你看看发生了什么。删除&#34; 2&gt;&amp; 1&#34;一旦你调试了问题。正如评论中指出的那样,我想实际的问题是你使用的是单引号,这意味着$ commandString正在按字面解释。请改用双引号!
警告!!! 这真的很不安全。您将从POST获取的未经过验证的参数传递给以sudoers中的用户身份运行的命令。无论两个登录屏幕如何,您都应该清理输入。