Récupération de variables impossible :'(

Résolu
Signaler
Messages postés
10
Date d'inscription
dimanche 13 mars 2011
Statut
Membre
Dernière intervention
27 décembre 2011
-
Messages postés
10
Date d'inscription
dimanche 13 mars 2011
Statut
Membre
Dernière intervention
27 décembre 2011
-
Bonjour à tous !
Voila, j'ai un petit problème avec une page php, je voudrais récupérer proprement plusieurs variables.
Je vous montre le code et je vous explique :
<?

class Minequery {

public static function query($address, $port 8000, $timeout 5) {
        $address = '88.182.196.189';
$query = array();

$beginning_time = microtime(true);

$socket = @fsockopen($address, $port, $errno, $errstr, $timeout);

if (!$socket) {
// Could not establish a connection to the server.
return false;
}

$end_time = microtime(true);

fwrite($socket, "QUERY\n");

$response = "";

while(!feof($socket)) {
$response .= fgets($socket, 1024);
}

$response = explode("\n", $response);

// Server port
$query['serverPort'] = explode(" ", $response[0], 2);
$query['serverPort'] = $query['serverPort'][1];

// Player count
$query['playerCount'] = explode(" ", $response[1], 2);
$query['playerCount'] = $query['playerCount'][1];

// Max players
$query['maxPlayers'] = explode(" ", $response[2], 2);
$query['maxPlayers'] = $query['maxPlayers'][1];

// Player list
$query['playerList'] = explode(" ", $response[3], 2);
$query['playerList'] = explode(", ", trim($query['playerList'][1], "[]"));

$query['latency'] = ($end_time - $beginning_time) * 1000;

return $query;
}

        /**
        * Queries a Minequery server using JSON.
        */
public static function query_json($address, $port 8000, $timeout 5) {
$beginning_time = microtime(true);

$socket = @fsockopen($address, $port, $errno, $errstr, $timeout);

if (!$socket) {
// Could not establish a connection to the server.
return false;
}

$end_time = microtime(true);

fwrite($socket, "QUERY_JSON\n");

$response = "";

while(!feof($socket)) {
$response .= fgets($socket, 1024);
}

$query = json_decode($response);
$query->latency = ($end_time - $beginning_time) * 1000;

return $query;
}
}

//LA OU J'ECRIS !//
print_r(Minequery::query("88.182.196.189"));
echo '
';
print_r(Minequery::query_json("88.182.196.189"));

?>


Ce que je voudrais c'est récupérer MaxPlayers, PlayersCount et PlayersList pour pouvoir mettre ca sur mon site.
A part ça tout marche (le serveur est reconnu, le problème n'est pas la) !
J'ai juste besoin d'écrire sur mon site par exemple : Joueurs en ligne 2/10.

J'espère que vous pourrez m'aider !

Merci d'avance !

Louis

7 réponses

Messages postés
106
Date d'inscription
vendredi 29 septembre 2006
Statut
Membre
Dernière intervention
6 mars 2012

Erreur...

Plus juste maintenant:

<?php
$res = Minequery::query("88.182.196.189");
$res_json = Minequery::query_json("88.182.196.189");

echo 'Joueur en ligne '.$res['playerCount'].'/'.$res['maxPlayers'].'.';
//ou
echo 'Joueur en ligne '.$res_json['playerCount'].'/'.$res_json['maxPlayers'].'.';
?>
Messages postés
106
Date d'inscription
vendredi 29 septembre 2006
Statut
Membre
Dernière intervention
6 mars 2012

Je pense que oui. Il faudrait faire:
<?php
$res = Minequery::query("88.182.196.189");
$res_json = Minequery::query_json("88.182.196.189");

if ( $res !== FALSE ){
  echo 'Joueur en ligne '.$res['playerCount'].'/'.$res['maxPlayers'].'.';
}else{
  echo 'Serveur Offline';
}
//ou
if ( $res_json !== FALSE ){
  echo 'Joueur en ligne '.$res_json['playerCount'].'/'.$res_json['maxPlayers'].'.';
}else{
  echo 'Serveur Offline';
}
?>
Messages postés
106
Date d'inscription
vendredi 29 septembre 2006
Statut
Membre
Dernière intervention
6 mars 2012

Bonjour,

Qu'est ce que donne un "echo" de la variable "$response" juste à la fin de la boucle "while"?
Messages postés
10
Date d'inscription
dimanche 13 mars 2011
Statut
Membre
Dernière intervention
27 décembre 2011

J'obtiens ceci :
Warning: Missing argument 1 for Minequery::query(), called in /var/www/legtux.org/users/twimpkees/craft/test.php on line 83 and defined in /var/www/legtux.org/users/twimpkees/craft/test.php on line 5
Array ( [serverPort] => 25565 [playerCount] => 0 [maxPlayers] => 10 [playerList] => Array ( [0] => ) [latency] => 28.1510353088 )
{"serverPort":25565,"playerCount":0,"maxPlayers":10,"playerList":[]} stdClass Object ( [serverPort] => 25565 [playerCount] => 0 [maxPlayers] => 10 [playerList] => Array ( ) [latency] => 32.7320098877 ) 
Messages postés
106
Date d'inscription
vendredi 29 septembre 2006
Statut
Membre
Dernière intervention
6 mars 2012

Je n'ai pas compris la question, mais je vais essayer une réponse quand même?!

<?php
$res = Minequery::query("88.182.196.189");
$res_json = Minequery::query_json("88.182.196.189");

echo 'Joueur en ligne '.$res['playerCount'].'/'.$res['playerCount'].'.';
//ou
echo 'Joueur en ligne '.$res_json['playerCount'].'/'.$res_json['playerCount'].'.';
?>
Messages postés
10
Date d'inscription
dimanche 13 mars 2011
Statut
Membre
Dernière intervention
27 décembre 2011

Une chose à dire : TU GERES TROP !
Merci beaucoup !

J'ai juste une autre petite question, est-ce que ce code peut me permettre d'afficher le statut du serveur (Online ou Offline) ?
Messages postés
10
Date d'inscription
dimanche 13 mars 2011
Statut
Membre
Dernière intervention
27 décembre 2011

Ca marche ! Un grand merci à toi pour ton aide précieuse !