Kezdőoldal » Számítástechnika » Weblapkészítés » Hogyan köthetném ezt össze?

Hogyan köthetném ezt össze?

Figyelt kérdés

Van egy bérelt minecraft szerverem (1.7.2), és össze szeretném kötni a weboldallal...

Van is erre egy php kódom, de egyszerűen nem jelenik meg a szerver státusz...Mi a hiba?



<?php


/**

* Minecraft Server Status Query

* @author Julian Spravil <julian.spr@t-online.de> [link]

* @license Free to use but dont remove the author, license and copyright

* @copyright ˆ 2013 Julian Spravil

*/

class MinecraftServerStatus {


private $timeout;


public function __construct($timeout = 2) {

$this->timeout = $timeout;

}


public function getStatus($host = '144.76.139.118', $version = '1.7.*' , $port = 25720) {


if (substr_count($host , '.') != 4) $host = gethostbyname($host);


$serverdata = array();

$serverdata['hostname'] = $host;

$serverdata['version'] = true;

$serverdata['protocol'] = false;

$serverdata['players'] = true;

$serverdata['maxplayers'] = true;

$serverdata['motd'] = false;

$serverdata['motd_raw'] = false;

$serverdata['favicon'] = true;

$serverdata['ping'] = true;


$socket = $this->connect($host, $port);


if(!$socket) {

return false;

}


if(preg_match('/1.7|1.8/',$version)) {


$start = microtime(true);


$handshake = pack('cccca*', hexdec(strlen($host)), 0, 0x04, strlen($host), $host).pack('nc', $port, 0x01);


socket_send($socket, $handshake, strlen($handshake), 0); //give the server a high five

socket_send($socket, "\x01\x00", 2, 0);

socket_read( $socket, 1 );


$ping = round((microtime(true)-$start)*1000); //calculate the high five duration


$packetlength = $this->read_packet_length($socket);


if($packetlength < 10) {

return false;

}


socket_read($socket, 1);


$packetlength = $this->read_packet_length($socket);


$data = socket_read($socket, $packetlength, PHP_NORMAL_READ);


if(!$data) {

return false;

}


$data = json_decode($data);


$serverdata['version'] = $data->version->name;

$serverdata['protocol'] = $data->version->protocol;

$serverdata['players'] = $data->players->online;

$serverdata['maxplayers'] = $data->players->max;


$motd = $data->description;

$motd = preg_replace("/(§.)/", "",$motd);

$motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd);


$serverdata['motd'] = $motd;

$serverdata['motd_raw'] = $data->description;

$serverdata['favicon'] = $data->favicon;

$serverdata['ping'] = $ping;


} else {


$start = microtime(true);


socket_send($socket, "\xFE\x01", 2, 0);

$length = socket_recv($socket, $data, 512, 0);


$ping = round((microtime(true)-$start)*1000);//calculate the high five duration


if($length < 4 || $data[0] != "\xFF") {

return false;

}


$motd = "";

$motdraw = "";


//Evaluate the received data

if (substr((String)$data, 3, 5) == "\x00\xa7\x00\x31\x00"){


$result = explode("\x00", mb_convert_encoding(substr((String)$data, 15), 'UTF-8', 'UCS-2'));

$motd = $result[1];

$motdraw = $motd;


} else {


$result = explode('§', mb_convert_encoding(substr((String)$data, 3), 'UTF-8', 'UCS-2'));

foreach ($result as $key => $string) {

if($key != sizeof($result)-1 && $key != sizeof($result)-2 && $key != 0) {

$motd .= '§'.$string;

}

}

$motdraw = $motd;

}


$motd = preg_replace("/(§.)/", "", $motd);

$motd = preg_replace("/[^[:alnum:][:punct:] ]/", "", $motd); //Remove all special characters from a string


$serverdata['version'] = $result[0];

$serverdata['players'] = $result[sizeof($result)-2];

$serverdata['maxplayers'] = $result[sizeof($result)-1];

$serverdata['motd'] = $motd;

$serverdata['motd_raw'] = $motdraw;

$serverdata['ping'] = $ping;


}


$this->disconnect($socket);


return $serverdata;


}


private function connect($host, $port) {

$socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);

socket_connect($socket, $host, $port);

return $socket;

}


private function disconnect($socket) {

if($socket != null) {

socket_close($socket);

}

}


private function read_packet_length($socket) {

$a = 0;

$b = 0;

while(true) {

$c = socket_read($socket, 1);

if(!$c) {

return 0;

}

$c = Ord($c);

$a |= ($c & 0x7F) << $b++ * 7;

if( $b > 5 ) {

return false;

}

if(($c & 0x80) != 128) {

break;

}

}

return $a;

}


}



2014. dec. 30. 16:53
 1/4 A kérdező kommentje:
Jah, lehet h itt rontottam el... Minek kellene a class nevének lennie?
2014. dec. 30. 17:00
 2/4 Djjjozsiiiii ***** válasza:
a class neve: MinecraftServerStatus
2014. dec. 31. 10:15
Hasznos számodra ez a válasz?
 3/4 Djjjozsiiiii ***** válasza:
ahol használod engedélyezett olyan függvény, amit ez az osztály használ? Ennek kell utána keress.
2014. dec. 31. 10:16
Hasznos számodra ez a válasz?
 4/4 A kérdező kommentje:
Hogy érted ezt: "Ahol használod"?
2014. dec. 31. 14:33

Kapcsolódó kérdések:




Minden jog fenntartva © 2024, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!