PHP socket 获取Minecraft服务器信息

开了个我的世界服务器跟朋友玩,然后就想到在网页查看服务器motd、在线人数等服务器信息,就有了下面这段代码:

<?php
function getMinecraftServerInfo($host, $port) {
    $socket = @fsockopen("tcp://".$host, $port, $errno, $errstr, 1);

    if(!$socket) {
        return false;
    }

    fwrite($socket, "\xfe\x01");
    $data = fread($socket, 256);
    if(substr($data, 0, 1) != "\xFF") {
        return false;
    }

    $data = substr($data, 3);
    $data = iconv('UTF-16BE', 'UTF-8', $data);
    $data = explode("\x00", $data);
    $motd = $data[3];
    $onlinePlayers = $data[4];
    $maxPlayers = $data[5];

    fclose($socket);

    $response = array(
        "hostname" => $host,
        "port" => $port,
        "motd" => $motd,
        "onlinePlayers" => intval($onlinePlayers),
        "maxPlayers" => intval($maxPlayers)
    );
	//$unicode = $response["motd"];
	//$json = str_replace('\u', '\\u', $unicode);
	//$response["motd"]=json_decode('"' . $json . '"'); 
	
    return json_encode($response);
}

echo getMinecraftServerInfo("106.75.252.138","25565");

?>

这段代码会输出json格式的服务器信息,效果如下:

PHP socket 获取Minecraft服务器信息

注释的3行代码是用来解unicode编码的motd信息,实际上并不需要这3行,可以在前端调用的时候再做解码输出。(咱是为了var_dump能看见中文…)

给TA打赏
共{{data.count}}人
人已打赏
笔记

PHP socket 获取Minecraft服务器信息

2023-6-30 13:25:00

笔记

PHP socket 获取Minecraft服务器信息

2023-6-30 13:25:00

0 条回复 A文章作者 M管理员
    暂无讨论,说说你的看法吧
个人中心
购物车
优惠劵
今日签到
搜索