Pereiti prie turinio

Reikia PHP žinovų pagalbos


Rekomenduojami pranešimai

Sveiki, PHP žinovai. Man reikia padaryti puslapį, kuriame rodytų Minecraft serverio šiuos dalykus:

 

  • Kiek žaidėjų dabar žaidžia
  • Kiek gali daugiausiai žaidėjų žaisti
  • MOTD, kitaip tariant dienos žinutę
  • PING'ą

 

 

Sakykim kad pas mane toks kodas:

 

include "status.php";
$response = MinecraftServerStatus::query('play.mcprison.lt', 25565);
if (! $response) {
echo "OFFLINE";
 } else {
     echo $response['players']."/".$response['max_players'];
 }

 

status.php :

 

class Packet {

   protected $packetID;

   protected $data;

   public function __construct ($packetID) {
       $this->packetID = $packetID;
       $this->data = pack('C', $packetID);
   }

   public function addSignedChar ($data) {
       $this->data .= pack('c', $data);
   }

   public function addUnsignedChar ($data) {
       $this->data .= pack('C', $data);
   }

   public function addSignedShort ($data) {
       $this->data .= pack('s', $data);
   }

   public function addUnsignedShort ($data) {
       $this->data .= pack('S', $data);
   }
   public function addString ($data) {
       $this->data .= pack('C', strlen($data));
       $this->data .= $data;
   }

   public function send ($socket) {
       $this->data = pack('C', strlen($this->data)) . $this->data;
       socket_send($socket, $this->data, strlen($this->data), 0);
   }
}


class HandshakePacket extends Packet {

   public function __construct ($host, $port, $protocol, $nextState) {
       parent::__construct(0);
       $this->addUnsignedChar($protocol);
       $this->addString($host);
       $this->addUnsignedShort($port);
       $this->addUnsignedChar($nextState);
   }
}


class PingPacket extends Packet {

   public function __construct () {
       parent::__construct(0);
   }
}


class MinecraftServerStatus {
   public static function query ($host = '127.0.0.1', $port = 25565) {
       // check if the host is in ipv4 format
       $host = filter_var($host, FILTER_VALIDATE_IP) ? $host : gethostbyname($host);

       $socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);
       if (! @socket_connect($socket, $host, $port)) {
           return false;
       }

       // create the handshake and ping packet
       $handshakePacket = new HandshakePacket($host, $port, 107, 1);
       $pingPacket = new PingPacket();

       $handshakePacket->send($socket);

       // high five
       $start = microtime(true);
       $pingPacket->send($socket);
       $length = self::readVarInt($socket);
       $ping = round((microtime(true) - $start) * 1000);

       // read the requested data
       $data = socket_read($socket, $length, PHP_NORMAL_READ);
       $data = strstr($data, '{');
       $data = json_decode($data);

       $descriptionRaw = isset($data->description) ? $data->description : false;
       $description = $descriptionRaw;

       // colorize the description if it is supported
       if (gettype($descriptionRaw) == 'object' && isset($descriptionRaw->extra)) {
           $description = '';
           foreach ($descriptionRaw->extra as $item) {
               $description .= isset($item->bold) && $item->bold ? '<b>' : '';
               $description .= '<font color="' . $item->color . '">' . $item->text . '</font>';
               $description .= isset($item->bold) && $item->bold ? '</b>' : '';
           }
       }

       return array(
               'hostname' => $host,
               'port' => $port,
               'ping' => $ping,
               'version' => isset($data->version->name) ? $data->version->name : false,
               'protocol' => isset($data->version->protocol) ? $data->version->protocol : false,
               'players' => isset($data->players->online) ? $data->players->online : false,
               'max_players' => isset($data->players->max) ? $data->players->max : false,
               'description' => $description,
               'description_raw' => $descriptionRaw,
               'favicon' => isset($data->favicon) ? $data->favicon : false,
               'modinfo' => isset($data->modinfo) ? $data->modinfo : false
       );
   }

   private static function readVarInt ($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;
   }
}

 

mc.servai.lt duomenimis serveris play.mcprison.lt yra įjungtas

 

Gal galite pasakyti kame reikalas? Arba dar geriau sutvarkyti tas klases kad veiktų ir įduoti man, nes ten net ne aš dariau, ir nelabai man aišku, ko ten privaryta, atrodo, kai kurių dalykų net nereikėtų...

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Arba dar geriau – ištaisius kodą parašyti dokumentaciją ir ją atvežti nurodytu adresu už savo kurą. Tfu, o atvažiavus automobilį palikti dovanų ir pačiam grįžti autobusu.

Na, jei kas neturi ką veikti ir nori patobulėti (nes kai kažką darai, visada tobulėji) tai leidžiu

sutvarkyti tas klases kad veiktų ir įduoti man

:D

Redagavo P0NAS
Nuoroda į pranešimą
Dalintis kituose puslapiuose

O ką logas sako kai gauni 500 statusą?

Nu nežinau, daug ką, bet ten visi užrašai pasenę, niekas nebegalioja, ten rodo klaida pvz. 400 eilutėj, o tokios jau net nebėra. Aš nesuprantu kaip tuo error logu naudotis, jis ten rodo datas kažkokias, tai ten tos datos, kada tas erroras atsirado? Jei viską ištrinčiau, tai atnaujintų?

 

 

EDIT:

Jau išsiaiškinau, bet žinokit iš tikrųjų nieko nerodo apie tai... Viskas pasenę ir nieko galiojančio nėra...

Redagavo P0NAS
Nuoroda į pranešimą
Dalintis kituose puslapiuose

Taip, įsikėliau šį failą į savo kompiuterį ir su Wamp serveriu paleidęs jį neradau jokių 500 errorų. Viskas veikė kuo puikiausiai. Aš klausiau hostingo administracijos ar tik jie ko nors neblokuoja, sako SOCKET'ų neblokuoja. O čia vien socket'ais naudojamasi, kaip matau. Tai kame reikalas?

Nuoroda į pranešimą
Dalintis kituose puslapiuose
  • po 2 savaičių...

Taip, įsikėliau šį failą į savo kompiuterį ir su Wamp serveriu paleidęs jį neradau jokių 500 errorų. Viskas veikė kuo puikiausiai. Aš klausiau hostingo administracijos ar tik jie ko nors neblokuoja, sako SOCKET'ų neblokuoja. O čia vien socket'ais naudojamasi, kaip matau. Tai kame reikalas?

 

Ieškok loguose tos 500 klaidos. Mes ne aiškiaregiai, kad pasakytume, kas blogai. Bus klaida, bus ir paaiškinimas kur ir kaip taisyti kodą

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Na is pirmo zvilgsnio scriptas veikia normaliai.

 

*@* /var/www/html/* $ php ../test.php
16/100
*@* /var/www/html/* $ php ../test.php
16/100
*@* /var/www/html/* $ php ../test.php
15/100
*@* /var/www/html/* $ php ../test.php
15/100
*@* /var/www/html/* $ php ../test.php
15/100

 

Speju, kad 500 tau meta del to, kad kazkokia klaida yra is php. Gal truksta kazkokio modulio, ar per senas pas tave php. Priesh savo include pridek

error_reporting(E_ALL);

ini_set('display_errors', '1');

 

Sitos opcijos rodis tau klaidas is PHP puses.

Nuoroda į pranešimą
Dalintis kituose puslapiuose

Prisijunkite prie diskusijos

Jūs galite rašyti dabar, o registruotis vėliau. Jeigu turite paskyrą, prisijunkite dabar, kad rašytumėte iš savo paskyros.

Svečias
Parašykite atsakymą...

×   Įdėta kaip raiškusis tekstas.   Atkurti formatavimą

  Only 75 emoji are allowed.

×   Nuorodos turinys įdėtas automatiškai.   Rodyti kaip įprastą nuorodą

×   Jūsų anksčiau įrašytas turinys buvo atkurtas.   Išvalyti redaktorių

×   You cannot paste images directly. Upload or insert images from URL.

Įkraunama...
  • Dabar naršo   0 narių

    Nei vienas registruotas narys šiuo metu nežiūri šio puslapio.

  • Prisijunk prie bendruomenės dabar!

    Uždarbis.lt nariai domisi verslo, IT ir asmeninio tobulėjimo temomis, kartu sprendžia problemas, dalinasi žiniomis ir idėjomis, sutinka būsimus verslo partnerius ir dalyvauja gyvuose susitikimuose.

    Užsiregistruok dabar ir galėsi:

    ✔️ Dalyvauti diskusijose;

    ✔️ Kurti naujas temas;

    ✔️ Rašyti atsakymus;

    ✔️ Vertinti kitų žmonių pranešimus;

    ✔️ Susisiekti su bet kuriuo nariu asmeniškai;

    ✔️ Naudotis tamsia dizaino versija;

    ir dar daugiau.

    Registracija trunka ~30 sek. ir yra visiškai nemokama.

  • Naujausios temos

  • Karštos temos

×
×
  • Pasirinkite naujai kuriamo turinio tipą...