• Es freut uns dass du in unser Minecraft Forum gefunden hast. Hier kannst du mit über 130.000 Minecraft Fans über Minecraft diskutieren, Fragen stellen und anderen helfen. In diesem Minecraft Forum kannst du auch nach Teammitgliedern, Administratoren, Moderatoren , Supporter oder Sponsoren suchen. Gerne kannst du im Offtopic Bereich unseres Minecraft Forums auch über nicht Minecraft spezifische Themen reden. Wir hoffen dir gefällt es in unserem Minecraft Forum!

PHP - Minecraft Server Query

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
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:
<?PHP
    $fp = fsockopen('5.189.137.168', 25565, $errno, $errstr, 4) or die('<div id="server_offline">OFFLINE</div>');
   
    fwrite($fp, "\xFE");
    $answer = fread($fp, 256);
    if ($answer[0] != "\xFF") { die ('Anfrage fehlgeschlagen!'); }
   
    $text = substr($answer, 3);
    $text = mb_convert_encoding($text, 'auto', 'UCS-2');
    $parts = explode("\xA7", $text);
   
    echo '<div id="server_online">ONLINE</div>';
    echo 'Es sind ' . $parts[1] . ' von ' . $parts[2] . ' Spielern online';
?>

Wenn der Server online ist, dann läuft alles, ist er jedoch offline bekomme ich eine Fehlermeldung:

Code:
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 ;)
 

ShareLock

Kuhfänger
Registriert
2 November 2011
Beiträge
66
Alter
58
Diamanten
0
Es gibt in php den @ operator. dieser unterdrückt Fehler und Warnungen, sodass du dann besser drauf reagieren kannst. *

PHP:
<?PHP
    $fp = @fsockopen('5.189.137.168', 25565, $errno, $errstr, 4)
if(is_resource($fp)) {echo 'Server Offline';  exit }

* 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.
 
Zuletzt bearbeitet:

MrPyro13

Workaholic
Registriert
29 April 2013
Beiträge
826
Diamanten
300
Minecraft
MrPyro13
Hab nun ein Skript geschrieben, das funktioniert:

PHP:
<?PHP
    try {
        error_reporting(E_ERROR | E_PARSE | E_NOTICE);
        $fp = fsockopen('localhost', 25565, $errno, $errstr, 4);
     
        fwrite($fp, "\xFE");
        $answer = fread($fp, 256);
        if ($answer[0] != "\xFF") {
            echo '<div id="server_offline">OFFLINE</div>';
            exit;
        }
 
        $text = substr($answer, 3);
        $text = mb_convert_encoding($text, 'auto', 'UCS-2');
        $parts = explode("\xA7", $text);
 
        echo '<div id="server_online">ONLINE</div>';
        echo 'Es sind ' . $parts[1] . ' von ' . $parts[2] . ' Spielern online';
    } catch(Exception $e) {
        echo '<div id="server_offline">OFFLINE</div>';
    }
?>
 
Oben