Добрый день!
Решил написать для своего сайта мониторинг моих серверов, в частности RUST серверов. Нашел такой мониторинг SourceQuery и пару примеров с использованием данного мониторинга, но поскольку я хотел бы редактировать шаблон самой страницы, то эти примеры мне не особо подходят. И как не кручу, ничего не получается, тем более я новичок в работе с php. Помогите, пожалуйста, если это возможно.
Вот пример с использованием SourceQuery и работает:
<?php
// Подключение класса
require __DIR__ . '/SourceQuery/bootstrap.php';
use xPaw\SourceQuery\SourceQuery;
require __DIR__ . '/engine/data/ccsserversconfig.php';
// IP
$ip = $ccsserversconfig['ip'];
// Порт сервера
$port = $ccsserversconfig['port'];
// Таймаут
$timeout = 1;
// Экземпляр
$Query = new SourceQuery();
// Попытаться выполнить какое-то действие. В нашем случае выполнить метод подключения к серверу
try {
$Query->Connect($ip, $port, $timeout, SourceQuery :: GOLDSOURCE);
} catch(Exception $e) {
// если произошла ошибка, и в классе прописано исключение, то попытаться словить это исключение и остановить скрипт, выведя ошибку
exit($e->getMessage());
}
// Получение информации и запись ее в переменную
$info = $Query->GetInfo();
// Получение игроков и запись их в переменную
$players = $Query->GetPlayers();
// Отключение от сервера
$Query->Disconnect();
?>
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<title>Страница с инфой сервера</title>
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.2/css/bootstrap.min.css">
</head>
<body>
<div class="container">
<div class="panel panel-default">
<div class="panel-heading">
<h3>Информация</h3>
</div>
<div class="panel-body">
<table class="table table-bordered">
<?php if($info):?>
<tr>
<th>Название сервера</th>
<td><?php echo $info['HostName']?></td>
</tr>
<tr>
<th>Адрес сервера сервера</th>
<td><?php echo $ip . ':' . $port?></td>
</tr>
<tr>
<th>Карта</th>
<td><?php echo $info['Map']?></td>
</tr>
<tr>
<th>Игроков сейчас</th>
<td><?php echo $info['Players']?></td>
</tr>
<tr>
<th>Игроков всего</th>
<td><?php echo $info['MaxPlayers']?></td>
</tr>
<?php else:?>
<tr>
<th>Информация не получена. Сервер возможно выключен</th>
</tr>
<?php endif;?>
</table>
</div>
</div>
<div class="panel panel-default">
<div class="panel-heading">
<h3>Информация</h3>
</div>
<div class="panel-body">
<table class="table table-bordered table-condenced">
<?php if($players):?>
<thead>
<tr>
<th>Ник</th>
<th>Счет</th>
<th>Время</th>
</tr>
</thead>
<tbody>
<?php foreach($players as $player):?>
<tr>
<td><?php echo htmlspecialchars($player['Name'], ENT_QUOTES)?></td>
<td><?php echo intval($player['Frags'])?></td>
<td><?php echo $player['TimeF']?></td>
</tr>
<?php endforeach;?>
</tbody>
<?php else:?>
<tr><td>Нет игроков</td></tr>
<?php endif;?>
</table>
</div>
</div>
</div>
</body>
</html>
В файле engine/data/ccsserversconfig.php прописано только ip и port сервера. Тут подключение работает я уже проверил. Пример работает, информацию о сервере выводит. На основе этого я сделал 2 файла. Один делает подключение к серверу и получение информации source.php :
<?php
*/
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
require_once (ENGINE_DIR.'/SourceQuery/bootstrap.php');
use xPaw\SourceQuery\SourceQuery;
// конфиг
require_once (ENGINE_DIR.'/data/ccsserversconfig.php');
$ip = $ccsserversconfig['ip'];
$port = $ccsserversconfig['port'];
define( 'SQ_SERVER_ADDR', $ip );
define( 'SQ_SERVER_PORT', $port );
define( 'SQ_TIMEOUT', 3 );
$Query = new SourceQuery();
try {
$Query->Connect(SQ_SERVER_ADDR, SQ_SERVER_PORT, SQ_TIMEOUT, SourceQuery::GOLDSOURCE);
//$Query->SetUseOldGetChallengeMethod( true ); // Use this when players/rules retrieval fails on games like Starbound
}
catch( Exception $e ) {
// если произошла ошибка, и в классе прописано исключение, то попытаться словить это исключение и остановить скрипт, выведя ошибку
exit($e->getMessage());
}
// Получение информации и запись ее в переменную
$info = $Query->GetInfo();
// Получение игроков и запись их в переменную
$players = $Query->GetPlayers();
if($info){
$HostN = $info['HostName'];
$HostM = $info['Map'];
}
if($players){
foreach($players as $player){
$PlayerN = $player['Name'];
$PlayerF = $player['Frags'];
}
}
// Отключение от сервера
$Query->Disconnect();
?>
И второй файл sourceserver.php в который прописал информацию для шабона:
<?php
*/
if( ! defined( 'DATALIFEENGINE' ) ) {
die( "Hacking attempt!" );
}
function serverscon($templateFile = ''){
$tpl = new dle_template();
$tpl->dir = TEMPLATE_DIR;
$tpl->load_template($templateFile ?: 'eventserv.tpl');
require __DIR__ .'/source.php';
$tpl->set('{hostname}', $HostN );
$tpl->set('{players}', $PlayerN );
$tpl->set('{frags}', $PlayerF );
$tpl->compile('eventserv');
return $tpl->result['eventserv'];
}
$serverscon = serverscon();
if($serverscon AND (strpos( $tpl->copy_template, "eventserver" ) !== false)){
$tpl->set ( '{event}', $serverscon );
$tpl->set ( '[event]', "" );
$tpl->set ( '[/event]', "" );
}else{
$serversnot = "NO INFO";
$tpl->set ( '{event}', $serversnot );
$tpl->set ( '[event]', "" );
$tpl->set ( '[/event]', "" );
}
?>
Файлы source.php и sourceserver.php находятся в одной папке. Дальше я создаю статическую страницу используя шаблон eventserver, а в eventserver прописал {event}. И чтобы все работало дописал в /modules/static.php
include_once ENGINE_DIR.'/modules/ccsservers.php';Получаю только NO INFO . Получается что в $serverscon нет никаких данных. Ничего не помагает, не хватает знаний. Что я делал не так?