MartyRot Skrevet 4. april 2014 Del Skrevet 4. april 2014 (endret) Hei! Kanskje noen her kan hjelpe meg! Jeg forsøker å brukke dette php scripet (https://github.com/FunnyItsElmo/PHP-Minecraft-Server-Status-Query) for å få online/offline status, antall spillere, versjon etc på nettsiden til serveren. Problemet er at jeg får en blank side når jeg har gjort endringene som forklares i readme filen. Jeg får blank side uansett hvilken server-ip jeg bruker (har testet flere). Derfor tror jeg at det er noe problem med scripet. Dette er utklipp fra hele .php siden. Hva er det som er feil? Dette er "example.php": <html> <head> <title>Minecraft server</title> </head> <body> <?php include_once 'status.class.php'; //include the class $status = new MinecraftServerStatus(); // call the class $response = $status-> getStatus('37.59.252.113', 25889); // when you dont have the default port if(!$response) { echo"The Server is offline!"; } else { echo"<img width=\"64\" height=\"64\" src=\"".$response['favicon']."\" /> <br> The Server ".$response['hostname']." is running on ".$response['version']." and is online, currently are ".$response['players']." players online of a maximum of ".$response['maxplayers'].". The motd of the server is '".$response['motd']."'. The server has a ping of ".$response['ping']." milliseconds."; } ?> </body> </html> Jeg har ikke gjort noen endringer i "status.class.php": <?php /** * Minecraft Server Status Query * @author Julian Spravil <[email protected]> https://github.com/FunnyItsElmo * @license Free to use but dont remove the author, license and copyright * [USER=90879835]Copyright[/USER] © 2013 Julian Spravil */ class MinecraftServerStatus { private $timeout; public function __construct($timeout = 2) { $this->timeout = $timeout; } public function getStatus($host = '127.0.0.1', $version = '1.7.*' , $port = 25565) { if (substr_count($host , '.') != 4) $host = gethostbyname($host); $serverdata = array(); $serverdata['hostname'] = $host; $serverdata['version'] = false; $serverdata['protocol'] = false; $serverdata['players'] = false; $serverdata['maxplayers'] = false; $serverdata['motd'] = false; $serverdata['motd_raw'] = false; $serverdata['favicon'] = false; $serverdata['ping'] = false; $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; } } På nettside-serveren ligger filene slik:[-] webpage-example.php-status.class.php-index.phpEr det noe jeg mangler? Jeg ser ikke noen plass at scripet krever f. eks jquery installert, bare at query skal være true i "server.properties", og det er den. Har porten til query i "server.properties" noe å si? Tusen takk for hjelpen! Endret 4. april 2014 av MartyRot Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå