php парсер статуса сервера

Обсуждаем все, что относится к выделенным серверам *NIX (Unix, Linux) и Windows
Сообщение
Автор
artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#1 Сообщение 01.10.2013, 22:40

подскажите какой-нибудь простенький php парсер статуса сервера.
нужно:
название
статус онлайн/офлайн
кол-во игроков/слотов
карта
изображение карты
ип адрес
список игроков

уже пробовал и разочаровался:
lgls_v5.8_sa
phgstats_for_ilch1.1
gameq1.1.2


нужен простенький парсер с возможностью вывода кс сервера и тимспик3 сервера(здесь количество слотов, статус-онлайн-офлайн, количество людей.)
так чтобы была возможность редактировать внеший вид на свой лад. все ниже перечисленное не попадает под требования.

TopServers
Лейтенант
Лейтенант
Сообщения: 112
Зарегистрирован: 09.02.2010
Поблагодарили: 17 раз

#2 Сообщение 02.10.2013, 09:26

Возьми CServerInfo.php от сорсбанса. Удобен.

Код: Выделить всё

   $sinfo = new CServerInfo($server_ip,$server_port);
   $info = $sinfo->getInfo();
   var_dump($info);
список игроков:

Код: Выделить всё

   $players = $sinfo->getPlayers();

artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#3 Сообщение 02.10.2013, 17:47

сорс банс для 1.6?

weinstreizeR
Эксперты no-Steam
Эксперты no-Steam
Сообщения: 2105
Зарегистрирован: 30.08.2011
Благодарил (а): 32 раза
Поблагодарили: 760 раз
Контактная информация:

#4 Сообщение 02.10.2013, 18:11

artstylee писал(а):сорс банс для 1.6?
А разница? Скрипты везде одинаковые.

artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#5 Сообщение 03.10.2013, 20:58

нашел CServerInfo.php
и каким образом мне вывести то что я хочу?

TopServers
Лейтенант
Лейтенант
Сообщения: 112
Зарегистрирован: 09.02.2010
Поблагодарили: 17 раз

#6 Сообщение 04.10.2013, 06:34

Я выше написал код. В массивах $info и $players содержится нужная тебе информация.
РНР хоть немного знаешь?

artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#7 Сообщение 04.10.2013, 18:50

когда-то правил код и чуток шарил, сейчас же уже все забыл.
что мне делать с CServerInfo.php?
лью в корень сайта, далее на html страничке мне нужно вывести нужную инфу.
просто так standalone скрипт же не работает? куда я пропишу ип и адрес сервер? как вывести информацию в html?
пошаговую инструкцию в двух словах было бы неплохо -)

TopServers
Лейтенант
Лейтенант
Сообщения: 112
Зарегистрирован: 09.02.2010
Поблагодарили: 17 раз

#8 Сообщение 04.10.2013, 19:30

Страничка должна быть РНР а не html (или врубить обработку хтмл как рнр, чего лучше не делать).
например 1.рнр:

Код: Выделить всё

<?
include 'CServerInfo.php';
$sinfo = new CServerInfo('IP сервера','порт');
   $info = $sinfo->getInfo();
   var_dump($info); //  выведет названия строк в массиве
?>
Выложи сюда выводимое в браузер при открытии 1.php

artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#9 Сообщение 04.10.2013, 21:01

на выходе получил
array(11) { ["hostname"]=> string(39) "blalabla server" ["map"]=> string(8) "de_aztec" ["gamename"]=> string(7) "cstrike" ["gamedesc"]=> string(14) "Counter-Strike" ["numplayers"]=> int(15) ["maxplayers"]=> int(32) ["botcount"]=> int(0) ["dedicated"]=> string(1) "d" ["os"]=> string(1) "l" ["password"]=> int(0) ["secure"]=> int(0) }

$players = $sinfo->getPlayers();

вообще не работает, выдает пустую страницу. инетересно конечно, но как мне вывести все это списком в html?
ip: 1.2.3.4:27015
игроки: 15/32
карта: dust2
-изображение карты-
список игроков:

может мне просто чей-нибудь скрипт заюзать? полюбому должно быть что-нибудь простое но уже готовое. выводить из php инфу, потом преобразовывать ее в html убирая все лишние символы и прочее, возня надолго.

Добавлено спустя 2 минуты 7 секунд:
мне нравится геймтрекер, и я бы не против поставить его к себе на сайт, даже с его ватермарками, но баннеры там уже заданной конфигурации под себя не заделать

TopServers
Лейтенант
Лейтенант
Сообщения: 112
Зарегистрирован: 09.02.2010
Поблагодарили: 17 раз

#10 Сообщение 04.10.2013, 21:51

в $info['numplayers'] - количество игроков
в $info['maxplayers'] - кол-во слотов
ну и т.д.

вспоминай\учи РНР, без него никак)

artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#11 Сообщение 04.10.2013, 22:21

почему не работает $players = $sinfo->getPlayers();?

TopServers
Лейтенант
Лейтенант
Сообщения: 112
Зарегистрирован: 09.02.2010
Поблагодарили: 17 раз

#12 Сообщение 05.10.2013, 11:27

Для getPlayers() нужно ещё system-functions.php, тоже от сорсбанса.

Код: Выделить всё

    include('system-functions.php');
    include('CServerInfo.php');
жми

Код: Выделить всё

array(7) {
  [0]=>
  array(4) {
    ["index"]=>
    int(2)
    ["name"]=>
    string(8) "Жека"
    ["kills"]=>
    int(31)
    ["time"]=>
    string(20) "12 мин, 35 сек"
  }
  [1]=>
  array(4) {
    ["index"]=>
    int(1)
    ["name"]=>
    string(10) "Prozium II"
    ["kills"]=>
    int(19)
    ["time"]=>
    string(20) "15 мин, 32 сек"
  }
  [2]=>
  array(4) {
    ["index"]=>
    int(3)
    ["name"]=>
    string(29) "๑۩۩๑ [OopSs] ๑۩۩๑"
    ["kills"]=>
    int(10)
    ["time"]=>
    string(19) "9 мин, 24 сек"
  }
  [3]=>
  array(4) {
    ["index"]=>
    int(0)
    ["name"]=>
    string(4) "nerd"
    ["kills"]=>
    int(7)
    ["time"]=>
    string(19) "23 мин, 6 сек"
  }
  [4]=>
  array(4) {
    ["index"]=>
    int(4)
    ["name"]=>
    string(3) "Van"
    ["kills"]=>
    int(2)
    ["time"]=>
    string(19) "3 мин, 13 сек"
  }
  [5]=>
  array(4) {
    ["index"]=>
    int(5)
    ["name"]=>
    string(15) "...is Ap(Music)"
    ["kills"]=>
    int(1)
    ["time"]=>
    string(19) "1 мин, 52 сек"
  }
  [6]=>
  array(4) {
    ["index"]=>
    int(6)
    ["name"]=>
    string(20) "Vãňёκ24Řūى™"
    ["kills"]=>
    int(0)
    ["time"]=>
    string(9) "37 сек"
  }
}

artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#13 Сообщение 05.10.2013, 14:29

You should not be here. Only follow links!
удалил
if(!defined("IN_SB")){echo "You should not be here. Only follow links!";die();}
из system-functions.php
работает но списка не вижу.

Код: Выделить всё

<?    
include 'CServerInfo.php';
include 'system-functions.php';
$sinfo = new CServerInfo('1.2.3.4','27015');
   $info = $sinfo->getInfo();
   $players = $sinfo->getPlayers();
   var_dump($info); //  выведет названия строк в массиве

?>
это то что должно быть на выходе?
у меня пусто

Код: Выделить всё

array(7) {
  [0]=>
  array(4) {
    ["index"]=>
    int(2)
    ["name"]=>
    string(8) "Жека"
    ["kills"]=>
    int(31)
    ["time"]=>
    string(20) "12 мин, 35 сек"
  }
  [1]=>
  array(4) {
    ["index"]=>
    int(1)
    ["name"]=>
    string(10) "Prozium II"
    ["kills"]=>
    int(19)
    ["time"]=>
    string(20) "15 мин, 32 сек"
  }
  [2]=>
  array(4) {
    ["index"]=>
    int(3)
    ["name"]=>
    string(29) "๑۩۩๑ [OopSs] ๑۩۩๑"
    ["kills"]=>
    int(10)
    ["time"]=>
    string(19) "9 мин, 24 сек"
  }
  [3]=>
  array(4) {
    ["index"]=>
    int(0)
    ["name"]=>
    string(4) "nerd"
    ["kills"]=>
    int(7)
    ["time"]=>
    string(19) "23 мин, 6 сек"
  }
  [4]=>
  array(4) {
    ["index"]=>
    int(4)
    ["name"]=>
    string(3) "Van"
    ["kills"]=>
    int(2)
    ["time"]=>
    string(19) "3 мин, 13 сек"
  }
  [5]=>
  array(4) {
    ["index"]=>
    int(5)
    ["name"]=>
    string(15) "...is Ap(Music)"
    ["kills"]=>
    int(1)
    ["time"]=>
    string(19) "1 мин, 52 сек"
  }
  [6]=>
  array(4) {
    ["index"]=>
    int(6)
    ["name"]=>
    string(20) "Vãňёκ24Řūى™"
    ["kills"]=>
    int(0)
    ["time"]=>
    string(9) "37 сек"
  }
}

TopServers
Лейтенант
Лейтенант
Сообщения: 112
Зарегистрирован: 09.02.2010
Поблагодарили: 17 раз

#14 Сообщение 05.10.2013, 14:58

Напиши в начало РНР-файла:

Код: Выделить всё

error_reporting(E_ALL);
ini_set('error_reporting', E_ALL);
В принципе от system-functions.php нужно всего две функции. Можешь их добавить в начало РНР-файла и убрать инклуд функций:
Функции

Код: Выделить всё

function array_qsort(&$array, $column=0, $order=SORT_ASC, $first=0, $last= -2)
{
  $keys = array_keys($array);
  if($last == -2) $last = count($array) - 1;
  if($last > $first) {
   $alpha = $first;
   $omega = $last;
   $key_alpha = $keys[$alpha];
   $key_omega = $keys[$omega];
   $guess = $array[$key_alpha][$column];
   while($omega >= $alpha) {
     if($order == SORT_ASC) {
       while($array[$key_alpha][$column] < $guess) {$alpha++; $key_alpha = $keys[$alpha]; }
       while($array[$key_omega][$column] > $guess) {$omega--; $key_omega = $keys[$omega]; }
     } else {
       while($array[$key_alpha][$column] > $guess) {$alpha++; $key_alpha = $keys[$alpha]; }
       while($array[$key_omega][$column] < $guess) {$omega--; $key_omega = $keys[$omega]; }
     }
     if($alpha > $omega) break;
     $temporary = $array[$key_alpha];
     $array[$key_alpha] = $array[$key_omega]; $alpha++;
     $key_alpha = $keys[$alpha];
     $array[$key_omega] = $temporary; $omega--;
     if ($omega > 0)
     	$key_omega = $keys[$omega];
   }
   array_qsort ($array, $column, $order, $first, $omega);
   array_qsort ($array, $column, $order, $alpha, $last);
  }
}

function SecondsToString($sec, $textual=true)
{
	if($textual)
	{
		$div = array( 2592000, 604800, 86400, 3600, 60, 1 );
		$desc = array('мес','нед','день','час','мин','сек');
		$ret = null;
		foreach($div as $index => $value)
		{
			$quotent = floor($sec / $value); //greatest whole integer
			if($quotent > 0) {
				$ret .= "$quotent {$desc[$index]}, ";
				$sec %= $value;
			}
		}
		return substr($ret,0,-2);
	}
	else
	{
		$hours = floor ($sec / 3600);
		$sec -= $hours * 3600;
		$mins = floor ($sec / 60);
		$secs = $sec % 60;
		return "$hours:$mins:$secs";
	}
}

artstylee
Сержант
Сержант
Сообщения: 81
Зарегистрирован: 24.09.2013
Благодарил (а): 3 раза
Поблагодарили: 39 раз

#15 Сообщение 05.10.2013, 15:06

TopServers
1.php

Код: Выделить всё

<?    
include 'CServerInfo.php';
function array_qsort(&$array, $column=0, $order=SORT_ASC, $first=0, $last= -2)
{
  $keys = array_keys($array);
  if($last == -2) $last = count($array) - 1;
  if($last > $first) {
   $alpha = $first;
   $omega = $last;
   $key_alpha = $keys[$alpha];
   $key_omega = $keys[$omega];
   $guess = $array[$key_alpha][$column];
   while($omega >= $alpha) {
     if($order == SORT_ASC) {
       while($array[$key_alpha][$column] < $guess) {$alpha++; $key_alpha = $keys[$alpha]; }
       while($array[$key_omega][$column] > $guess) {$omega--; $key_omega = $keys[$omega]; }
     } else {
       while($array[$key_alpha][$column] > $guess) {$alpha++; $key_alpha = $keys[$alpha]; }
       while($array[$key_omega][$column] < $guess) {$omega--; $key_omega = $keys[$omega]; }
     }
     if($alpha > $omega) break;
     $temporary = $array[$key_alpha];
     $array[$key_alpha] = $array[$key_omega]; $alpha++;
     $key_alpha = $keys[$alpha];
     $array[$key_omega] = $temporary; $omega--;
     if ($omega > 0)
        $key_omega = $keys[$omega];
   }
   array_qsort ($array, $column, $order, $first, $omega);
   array_qsort ($array, $column, $order, $alpha, $last);
  }
}

function SecondsToString($sec, $textual=true)
{
   if($textual)
   {
      $div = array( 2592000, 604800, 86400, 3600, 60, 1 );
      $desc = array('мес','нед','день','час','мин','сек');
      $ret = null;
      foreach($div as $index => $value)
      {
         $quotent = floor($sec / $value); //greatest whole integer
         if($quotent > 0) {
            $ret .= "$quotent {$desc[$index]}, ";
            $sec %= $value;
         }
      }
      return substr($ret,0,-2);
   }
   else
   {
      $hours = floor ($sec / 3600);
      $sec -= $hours * 3600;
      $mins = floor ($sec / 60);
      $secs = $sec % 60;
      return "$hours:$mins:$secs";
   }
}
$sinfo = new CServerInfo('12.3.4.5','27015');
   $info = $sinfo->getInfo();
   $players = $sinfo->getPlayers();
   var_dump($info); //  выведет названия строк в массиве

?>
на выходе получаю

Код: Выделить всё

array(11) { ["hostname"]=> string(39) "tratata" ["map"]=> string(8) "de_dust2" ["gamename"]=> string(7) "cstrike" ["gamedesc"]=> string(14) "Counter-Strike" ["numplayers"]=> int(1) ["maxplayers"]=> int(32) ["botcount"]=> int(0) ["dedicated"]=> string(1) "d" ["os"]=> string(1) "l" ["password"]=> int(0) ["secure"]=> int(0) } 

Ответить