PHP在服务器上执行bat文件时显示命令提示窗口


PHP when executing bat file display command prompt window on server?

我设置了一个网页,允许我远程执行用于启动minecraft服务器的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
  • 你能分享你的.bat吗?也许它根本没有产生任何产出
  • 是否可以var_dump$output?当数组为空时,无论胶水是什么,内爆都会输出空字符串
  • 如果你想在浏览器中创建换行符,你应该使用<br/>标签,所以你的回声应该是这样的:echo nl2br(implode("'n", $output));echo implode("<br/>", $output);
  • 如果您的HTML标记中有错误的标记,请将http更改为html

  • 你只试过背痛吗?

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

popen函数可以帮助您,它打开了一个管道,指向通过分叉命令提供的命令执行的进程。

来自文档:

popen

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

说明

resource popen ( string $command , string $mode )

打开指向通过分叉由命令给定的命令执行的进程的管道。

参数

命令命令

mode模式

返回值

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

如果发生错误,则返回FALSE。