我有一个运行Minecraft服务器的TMUX会话,我正在为服务器创建一个Web界面.
目前我有以下文件:
command.sh
#!/bin/bash
tmux send-keys -t minecraft C-z "$@" Enter
Run Code Online (Sandbox Code Playgroud)
的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>
Run Code Online (Sandbox Code Playgroud)
command.sh在终端中工作,我可以使用所有标准命令
./command.sh "/help"
Run Code Online (Sandbox Code Playgroud)
但是我无法使用上述方法从php执行此脚本.我已经将www-data和www-user添加到sudoers并尝试了
shell_exec('sudo ./command.sh $commandString')
但这也没有奏效.
单击提交按钮时,将回显输出,但它是空白的.
有人可以帮忙指出我执行脚本的方法出错了吗?

command.sh遇到问题并向stderr输出一些东西.shell_exec只返回stdout,所以你没有看到错误.尝试将"2>&1"附加到命令的末尾,例如
$output = shell_exec('./command.sh $commandString 2>&1');
Run Code Online (Sandbox Code Playgroud)
这会将stderr发送到stdout,让你看看发生了什么.调试问题后,删除"2>&1".正如评论中指出的那样,我想实际的问题是你使用的是单引号,这意味着$ commandString正在按字面解释.请尝试双引号!
警告!!! 这真的很不安全.您将从POST获取的未经过验证的参数传递给以sudoers中的用户身份运行的命令.无论两个登录屏幕如何,您都应该清理输入.