我有一个运行 Minecraft 服务器的 TMUX session ,我正在为服务器创建一个 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')
但这也没有用。
当提交按钮被点击时,输出被回显但是它是空白的。
有人可以帮忙指出我执行脚本的方法哪里出了问题吗?
编辑 我截了两张截图,一张之前一张之后,以进一步说明。
最佳答案
command.sh
出现问题并向 stderr 输出内容。 shell_exec
只返回标准输出,所以您看不到错误。尝试在命令末尾附加“2>&1”,例如
$output = shell_exec('./command.sh $commandString 2>&1');
这会将 stderr 发送到 stdout,让您看到发生了什么。调试完问题后删除“2>&1”。正如评论中指出的那样,我想实际问题是您使用的是单引号,这意味着 $commandString 是按字面解释的。请尝试使用双引号!
警告!!! 这真的很不安全。您正在将从 POST 获得的未清理参数传递给以 sudoers 中的用户身份运行的命令。不管有两个登录屏幕,您都应该清理您的输入。
关于php - 无法从 PHP 向 TMUX session 发送命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26666503/