开了个我的世界服务器跟朋友玩,然后就想到在网页查看服务器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格式的服务器信息,效果如下:

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