[REHBER] Mysql bağlantısız sunucu online gösterme!

Hetanekoq

Kızıltaş Madencisi
Mesajlar
445
En iyi cevaplar
0
Beğeniler
159
Puanları
640
Merhaba arkadaşlar,
Günümüzde yükselen her sunucun bir websitesi var. Bu websitelerinde sunucularında kaç kişi açık ve kapasiteleri kaç onu göstermek istiyorlar. Bunun için Türkçe bir kaynak yok. Bende neden hazırlamıyorum diye düşündüm. Anlatıma geçelim. Bu arada php kodları bana ait değildir. İngilizce bir kaynaktan buldum ve Türkçeleştirdim.

İlk olarak sayfamızın türü PHP olmalı. Html'de çalışmaz. Dizinimize ayar.php adında bir dosya oluşturup içine şunları yazıyoruz:
PHP:
<?php
    class MinecraftServerStatus {

        private $timeout;

        public function __construct($timeout = 2) {
            $this->timeout = $timeout;
        }

        public function getStatus($host = 'BURAYA IP GIRIN', $port = 25565, $version = '1.7.*') {

            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);
                socket_send($socket, "\x01\x00", 2, 0);
                socket_read( $socket, 1 );

                $ping = round((microtime(true)-$start)*1000);

                $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);
              
                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);

                    $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);
            if (!@socket_connect($socket, $host, $port)) {
                $this->disconnect($socket);
                return false;
            }
            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;
        }

    }
BURAYA IP GIRIN kısmına sunucu adresini yazın. Şimdı sıra sayfamızda. Ben indexe gireceğinizi varsayarak index.php dosyasına sunucu durumunu nerede göstereceksek oraya bu kodları giriyoruz:
PHP:
<?php
include_once 'ayar.php';
$status = new MinecraftServerStatus();
$response = $status->getStatus('IP GIRIN');
if(!$response) {
    echo"Sunucu kapalı!<br>";
} else {
    echo"<b>".$response['players']."/".$response['maxplayers']." kişi açık!</b><br><br>";
}
?>
Ve buradada tekrar IP GIRIN kısmına IP'nizi yazın. Sunucu durumu hazır. Yapamadığınız bir yer olursa seve seve yardım ederim.

DEMO: TIKLA

İyi oyunlar. Özel mesaj ile soru-sorun bildirebilirsiniz.
 


RepublicanSensei

ˢᵖᶤᵍᵒᵗ ᵈᵉᵛᵉˡᵒᵖᵉʳ
Mesajlar
862
En iyi cevaplar
0
Beğeniler
490
Puanları
890
benim eski serverin adına nekadar benziyor "SurvivalMC - SurviMC" :D neyse güzel anlatım +rep bro
 

MomryBey

Zombi Katili
Mesajlar
188
En iyi cevaplar
0
Beğeniler
37
Puanları
0
Yararlı fakat site bilgim olmadığından anlamadım

SM-N910H cihazımdan Tapatalk kullanılarak gönderildi
 

Üst