php - 无法从 PHP 向 TMUX session 发送命令

标签 php html linux bash tmux

我有一个运行 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')

但这也没有用。

当提交按钮被点击时,输出被回显但是它是空白的。

有人可以帮忙指出我执行脚本的方法哪里出了问题吗?


编辑 我截了两张截图,一张之前一张之后,以进一步说明。

enter image description here

最佳答案

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/

相关文章:

javascript - 限制滚动到目标 id

asp.net - iFrame 中的 SSL 登录

linux - Shell 脚本 : Count files, 删除 'X' 最旧的文件

php - 通过扩展类在其外部使用wordpress 4.0?

php - For cycle & MYSQL 在 $i var 上乘以变量值

html - 显示带有 CSS 内容的图像

linux - 如何使用wget下载具有最新时间戳的目录

linux - 根据头信息计算ELF文件的大小

php - CURLOPT_VERBOSE 不工作

php - 路由 post_wishlist 不支持 GET 方法。支持的方法 : POST