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

时间:2014-09-22 07:35:03

标签: php apache batch-file minecraft

我已经设置了一个网页,允许我远程执行我用来启动我的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>

Bat文件:

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

2 个答案:

答案 0 :(得分:0)

  • 您可以分享 .bat 吗?也许它根本就没有产生任何输出?
  • 你能var_dump $ output 吗?当数组为空时,无论胶水是什么, implode 都会输出空字符串。
  • 如果您想在浏览器中创建换行符,则应使用<br/>标记,因此您的回显应如下所示: echo nl2br(implode("\n", $output)); 要么 echo implode("<br/>", $output);
  • 您的HTML标记中标记错误,将http更改为html

  • 您是否只尝试过反斜杠?

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

答案 1 :(得分:0)

popen函数可以帮助你,它通过分叉命令给出的命令打开一个进程的管道。

来自Documentation

  

POPEN

     

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

     

描述

     

resource popen ( string $command , string $mode )

     

打开通过分叉命令执行的命令执行的进程的管道。

     

参数

     

命令命令

     

模式

     

返回值

     

返回与fopen()返回的文件指针相同的文件指针,除外   它是单向的(可能只用于阅读或写作)   并且必须使用pclose()关闭。该指针可以与。一起使用   fgets(),fgetss()和fwrite()。当模式为&#39; r&#39;时,返回   当模式为时,文件指针等于命令的STDOUT   &#39; w&#39;,返回的文件指针等于命令的STDIN。

     

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