Gå til innhold

Hvordan få server informasjon på nettside?


Anbefalte innlegg

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.php

Er 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 av MartyRot
Lenke til kommentar

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 konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...