【问题标题】:PHP when executing bat file display command prompt window on server?PHP 在服务器上执行 bat 文件显示命令提示符窗口时?
【发布时间】:2014-11-16 02:36:20
【问题描述】:

我已经设置了一个网页,允许我远程执行我用来启动我的世界服务器的 bat 文件,以防我想在离开时玩。我已经成功地运行了 bat 文件并从我的站点远程启动了服务器,但是在服务器(我的桌面)上没有显示命令提示符,因为通常在正常运行 bat 文件时会出现这种情况。因此,我不知道停止服务器的好方法。

当使用 PHP 远程运行 bat 文件时,有什么方法可以让命令提示符显示在服务器上?有谁知道我可以通过网站在服务器上运行命令的任何简单方式,就像我使用命令提示符一样?

我的网站在与服务器相同的桌面上使用 wamp (apache) 运行,我将目录更改为 bat 文件的位置并能够执行它。

这是我的网站代码:

<?php
if (isset($_POST['button']))
    {
echo getcwd() . "\n";
chdir('C:\wamp\www\MinecraftServer');
exec('server.bat', $output);
echo implode("\n", $output);
}
?>
<!doctype http>
<html>
    <head>
        <title> Index </title>
        <style>
        body {background-color: GREENYELLOW}
        </style>
    </head>
    <body>
        <h1> Welcome! </h1>
        <h2> Are you here looking for the minecraft map? Click <a href="./WorldMap/map.html"> here </a>.</h2>
    <form method="post">
    <p>
        <button name="button">Start Server</button>
    </p>
    </form>
    </body>
</html>

蝙蝠文件:

"C:\Program Files\Java\jdk1.7.0_10\bin\java.exe" -Xmx4096M -Xms2048M -jar minecraft_server.1.8.exe nogui
pause

【问题讨论】:

    标签: php apache batch-file minecraft


    【解决方案1】:
    • 您能分享一下您的 .bat 吗?也许它根本没有产生任何输出?
    • 你能 var_dump $output 吗?当数组为空时,无论胶水是什么,implode都会输出我记得的空字符串。
    • 如果你想在浏览器中换行,你应该使用&lt;br/&gt;标签,所以你的回显应该是这样的: echo nl2br(implode("\n", $output)); 要么 echo implode("&lt;br/&gt;", $output);
    • 而您的 HTML 标记中有错误的标签,请将 http 更改为 html

    • 您是否只尝试过反引号?

    • 您可能需要考虑将执行 .bat 的结果输出到某个文本文件,然后读取该文件的内容。
    • 在您的 .bat 中使用 @ECHO OFF 以防止输出混乱

    【讨论】:

    • bat 文件没什么特别的,它只是运行 minecraft 服务器。通常从桌面运行它会弹出命令提示符: "C:\Program Files\Java\jdk1.7.0_10\bin\java.exe" -Xmx4096M -Xms2048M -jar minecraft_server.1.8.exe nogui pause 当我按下按钮时,服务器启动并可以通过输入 ip 访问。但是,通常要停止服务器,我只需在 bat 文件启动的命令提示符窗口中键入“stop”即可。但是,使用 PHP 启动它时不会出现命令提示符窗口,因此我无法远程或通过我的桌面停止或与服务器交互。
    • 抱歉,已实现的行距在 cmets 中不起作用。在主帖中添加了 bat 文件。
    【解决方案2】:

    popen 函数可以帮助你,它打开一个管道到一个通过 fork 由 command 给出的命令执行的进程。

    来自Documentation

    打开

    (PHP 4, PHP 5) popen — 打开进程文件指针

    说明

    resource popen ( string $command , string $mode )

    通过派生command给出的命令打开一个进程的管道。

    参数

    command 命令

    mode 模式

    返回值

    返回一个与 fopen() 返回的文件指针相同的文件指针,除了 它是单向的(只能用于读取或写入) 并且必须用 pclose() 关闭。该指针可用于 fgets()、fgetss() 和 fwrite()。当模式为 'r' 时,返回 文件指针等于命令的 STDOUT,当模式为 'w',返回的文件指针等于命令的STDIN。

    如果发生错误,返回 FALSE。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-24
      • 1970-01-01
      • 2016-02-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多