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