Web PHP - Minecraft Server Query

Dieses Thema im Forum "Programmierung" wurde erstellt von MrPyro13, 27. Juli 2015.

  1. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    Hallo Community,

    ich möchte eine PHP Funktion schreiben, die mir den Serverstatus mit den dazugehörigen Spielern angibt.
    Dazu habe ich folgendes PHP-Skript zusammenrrecherchiert:

    PHP:
    1. <?PHP
    2.     $fp = fsockopen('5.189.137.168', 25565, $errno, $errstr, 4) or die('<div id="server_offline">OFFLINE</div>');
    3.    
    4.     fwrite($fp, "\xFE");
    5.     $answer = fread($fp, 256);
    6.     if ($answer[0] != "\xFF") { die ('Anfrage fehlgeschlagen!'); }
    7.    
    8.     $text = substr($answer, 3);
    9.     $text = mb_convert_encoding($text, 'auto', 'UCS-2');
    10.     $parts = explode("\xA7", $text);
    11.    
    12.     echo '<div id="server_online">ONLINE</div>';
    13.     echo 'Es sind ' . $parts[1] . ' von ' . $parts[2] . ' Spielern online';
    14. ?>
    Wenn der Server online ist, dann läuft alles, ist er jedoch offline bekomme ich eine Fehlermeldung:

    Code (Text):
    1. PHP warning in file /var/www/html/forum/wcf/lib/data/dashboard/custom/scripts/DashboardCustomBox-33.class.php (2): fsockopen(): unable to connect to 5.189.137.168:25565 (Connection refused)

    Bin über jede Hilfe dankbar ;)

    PS: Ich bin ein absoluter Noob in Sachen PHP, deshalb einfach erklären ;)
     
    #1
  2. ShareLock
    Offline

    ShareLock

    Registriert seit:
    2. November 2011
    Beiträge:
    70
    Es gibt in php den @ operator. dieser unterdrückt Fehler und Warnungen, sodass du dann besser drauf reagieren kannst. *

    PHP:
    1. <?PHP
    2.     $fp = @fsockopen('5.189.137.168', 25565, $errno, $errstr, 4)
    3. if(is_resource($fp)) {echo 'Server Offline';  exit }
    4.  
    * Das ist so nicht korrekt, aber das ist nah an der Wahrheit.

    Edit: hier sollte natürlich kein or die nach @fsockopen kommen, oder aber man entfernt die if abfrage. Sollte persönliche Präferenz sein.
     
    #2
    [Dev] iTzSasukeHDxLP gefällt das.
  3. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    Bricht das die nicht den Code ab? Somit wird doch dann die if-Abfrage nicht mehr ausgeführt, oder?
     
    #3
    ShareLock gefällt das.
  4. MrPyro13
    Offline

    MrPyro13

    Registriert seit:
    29. April 2013
    Beiträge:
    829
    Minecraft:
    MrPyro13
    Hab nun ein Skript geschrieben, das funktioniert:

    PHP:
    1. <?PHP
    2.     try {
    3.         error_reporting(E_ERROR | E_PARSE | E_NOTICE);
    4.         $fp = fsockopen('localhost', 25565, $errno, $errstr, 4);
    5.      
    6.         fwrite($fp, "\xFE");
    7.         $answer = fread($fp, 256);
    8.         if ($answer[0] != "\xFF") {
    9.             echo '<div id="server_offline">OFFLINE</div>';
    10.             exit;
    11.         }
    12.  
    13.         $text = substr($answer, 3);
    14.         $text = mb_convert_encoding($text, 'auto', 'UCS-2');
    15.         $parts = explode("\xA7", $text);
    16.  
    17.         echo '<div id="server_online">ONLINE</div>';
    18.         echo 'Es sind ' . $parts[1] . ' von ' . $parts[2] . ' Spielern online';
    19.     } catch(Exception $e) {
    20.         echo '<div id="server_offline">OFFLINE</div>';
    21.     }
    22. ?>
     
    #4