Ir para conteúdo

Verificar Status Em Php


sharematrix

Posts Recomendados

Olá,

 

Vim trazer aqui um script em php, que verifica se o servidor está online, e diz quantos players/monsters/uptime

 

O Script não foi criado por mim, só fiz alguns ajustes para funcionar no TFS 0.4

 

Então vamos ao script :)

 

<?PHP // ShareMatrix 
$server['host'] .= 'underwar.org';
$server['port'] .= '7171';

// Verificando
$info = chr(6).chr(0).chr(255).chr(255).'info';
$sock = @fsockopen($server['host'],$server['port'], $errno, $errstr, 1);
if ($sock)
{
	fwrite($sock, $info); 
	$data=''; 
	while (!feof($sock))
	$data .= fgets($sock, 4096);
	fclose($sock);
	preg_match('/players online="(\d+)" max="(\d+)"/', $data, $matches);
	$cnf_['players'] .= 'Players: '.$matches[1].' / '.$matches[2].'';
	preg_match('/uptime="(\d+)"/', $data, $matches);
	$hour = floor($matches[1] / 3600);
	$minute = floor(($matches[1] - $h*3600) / 60);
	$cnf_['uptime'] .= $hour.'h '.$minute.'m';
	preg_match('/monsters total="(\d+)"/', $data, $matches);
	$cnf_['monsters'] .= $matches[1];
}
else
{
	$cnf_['players'] .= '0 / 0';
	$cnf_['uptime'] = '0';
	$cnf_['monsters'] = '0 h 0 m';
}
// Mostrando
echo $cnf_['players'];
echo $cnf_['uptime'];
echo $cnf_['monsters'];

?>

 

Atenciosamente

ShareMatrix

Link para o comentário
Compartilhar em outros sites

Explicando o script:

 

$server['host'] = 'underwar.org';
$server['port'] = '7171';

Define o IP e Porta para conectar.

 

$info = chr(6).chr(0).chr(255).chr(255).'info';

É como se fosse uma chave que é enviada ao servidor dizendo que você deseja informações dele.

 

$sock = @fsockopen($server['host'],$server['port'], $errno, $errstr, 1);

Aqui tenta-se criar uma conexão de socket com o servidor.

 

if ($sock) {

Se a conexão dá certo...

 

               fwrite($sock, $info);
               $data=''; 

Envia por socket a "chave" pedindo informações e inicia uma variável para receber a resposta.

 

               while (!feof($sock))
                   $data .= fgets($sock, 4096);
               fclose($sock);

Então vai fazendo leitura da resposta e guardando na variável iniciada ($data).

 

Essa resposta é um código XML.

 

Aqui o código recebido quando usei o script no Dark Operations Server:

 

<?xml version="1.0"?>
<tsqp version="1.0">
   <serverinfo uptime="1222296" ip="178.63.28.195" servername="Dark Operations" port="7171" location="Europe" url="http://Dark-Operations.net/" server="The Forgotten Server" version="0.4_SVN" client="8.62"/>
   <owner name="Dark-Operations.net" email="darkoperations.ot@gmail.com"/>
   <players online="72" max="1000" peak="198"/><monsters total="36937"/>
   <npcs total="337"/>
   <map name="map.otbm" author="Dark Operations owners" width="38000" height="38000"/>
   <motd>Welcome to the Dark Operations Server!</motd>
</tsqp>

 

Como podem ver, tem várias informações, como número de NPCs, e-mail para contato, versão do OTServ...

 

               preg_match('/players online="(\d+)" max="(\d+)"/', $data, $matches);
               $cnf_['players'] = 'Players: '.$matches[1].' / '.$matches[2].'';

Aqui o script usa RegEX para obter o número atual e máximo de players online, e depois guarda isso em uma variável.

 

               preg_match('/uptime="(\d+)"/', $data, $matches);
               $hour = floor($matches[1] / 3600);
               $minute = floor(($matches[1] - $h*3600) / 60);
               $cnf_['uptime'] .= $hour.'h '.$minute.'m';

Novamente uso do RegEX, dessa vez para obter o tempo que o servidor está online.

 

Dessa vez o script também realiza algumas operações para transformar o tempo, que vem em segundos, para minutos e horas.

 

               preg_match('/monsters total="(\d+)"/', $data, $matches);
               $cnf_['monsters'] .= $matches[1];

E para terminar, usa-se RegEX para pegar o número de monstros no servidor.

 

       }
       else
       {
               $cnf_['players'] .= '0 / 0';
               $cnf_['uptime'] = '0';
               $cnf_['monsters'] = '0 h 0 m';
       }

Depois, define valores zerados para os dados, caso o script não tenha conseguido realizar conexão lá no comecinho.

 

// Mostrando
echo $cnf_['players'];
echo $cnf_['uptime'];
echo $cnf_['monsters'];

E aqui mostra os dados!

 

Fim!

 

Vale lembrar que os OTServs só aceitam uma conexão a cada X segundos (acho que 3, 5 ou 10, não tenho certeza), por isso tem que guardar esses dados de alguma forma se quiser que não fique dando valores zerados.

 

Não sei se para conexões locais (o site no mesmo local que o otserv) também tem essa restrição de tempo.

Link para o comentário
Compartilhar em outros sites

  • 1 month later...
preg_match('/players online="(\d+)" max="(\d+)"/', $data, $matches);

 

Não é necessario utilizar preg_match só para isso, mais facil:

 

$XML = @simplexml_load_string($data);

if($XML){

print_r($XML);

return $XML;

}

 

Já ira vir todos os dados.

Link para o comentário
Compartilhar em outros sites

×
×
  • Criar Novo...