Jump to content
Sign in to follow this  
Graf

[WEB]Статистика сервера

Recommended Posts

Добрый вечер. Как-то давно меня очень интересовала статистика сервера. Она была лишь на платных сайтах. Так вот...

P.S. Думаю все могут посмотреть таблицы в БД, чтобы узнать название... 

<?php 
error_reporting(E_ALL);	/*начиная с этой строки */
ini_set('display_startup_errors', 1);
ini_set('display_errors', '1'); /* и заканчивая этой - вывод ошибок. Если у вас появились ошибки - они выведутся на сайте. */
$host     = "IP"; 
$username = "Login DB"; 
$password = "Password DB"; 
/*$username, $host, $password и тому подобное - переменные, в которые мы записываем что-нибудь. В данные три переменные мы записали данные для подключения к БД */
$connection = @mssql_connect($host,$username,$password) or die("Can`t connection server!");	/*Здесь мы проверяем подключение в БД. Если оно отсутствует - мы увидим "Can`t connection server!" */

$resacc= @mssql_query('SELECT name FROM AccountServer.dbo.account_login');	/*Из базы данных AccountServer мы берем таблицу account_login */
$acc_num = mssql_num_rows($resacc); 	/*Узнаем количество строк в таблицу account_login */

$whoseonline = @mssql_query('SELECT * FROM gamedb.dbo.character WHERE mem_addr > 0');	/*Из БД GameDB берем имена персонажей, где mem_addr > 0, то есть которые онлайн */
$online = mssql_num_rows($whoseonline);	/*Узнаем количество строк с персонажами, которые онлайн, чтобы вывести онлайн на сервере. */

?> 
<!DOCTYPE html>
<html lang="ru">
<head>
  	<!--Подключаем русский язык-->
    <meta charset="UTF-8">
</head>
<body>
        <b>Статистика</b>
        <br /> Аккаунты - <?=$acc_num;?>	<!--Таким образом мы выводим значения полученных переменных-->
        <br /> Онлайн - <?=$online;?>
  </body>
</html>
    

P.S.S. Чтобы заработал код, используйте PHP не более 5.6 версии.

Edited by Graf

Share this post


Link to post
Share on other sites

Я бы внес корректировку мелкую:

<?
$debug = 0; // 1 - включить дебаг, 0 - выключить
if (!empty($debug)){
error_reporting(E_ALL);	/*начиная с этой строки */
ini_set('display_startup_errors', 1);
ini_set('display_errors', '1'); /* и заканчивая этой - вывод ошибок. Если у вас появились ошибки - они выведутся на сайте. */
} else {
error_reporting(0);
}
...

На бою (на рабочем сайте), лучше не выводить ошибки.

 

P.S. знак @ перед функцией, означает что по ней вывода ошибки не будет. По-этому, советую тоже убрать. Иначе, дебаг будет не полным.

Edited by Chudik

gigabar.png.c3c21d2a586d5395019e41be9510900b.png

По всем вопросам, обращайтесь [email protected]

Share this post


Link to post
Share on other sites

Привет, @Graf!

 

Хочу дать несколько советов:

1. Ты используешь устаревшие функции mssql_******(), которые удалены в новых версиях PHP (7.0.0 и выше). Сегодня лучше использовать интерфейс PDO;

2.  При каждом выполнении твоего скрипта будет выполнено несколько запросов к MSSQL-серверу. Чтобы снизить на сервер нагрузку, можно применить кеширование, т.е. обновлять статистику, например, раз в час;

3. При работе с MSSQL-сервером могут возникать разные ошибки, их лучше проверять и обрабатывать. 


Share this post


Link to post
Share on other sites

Update!

Вот на sqlsrv(php 7.4 использовал):

<?
$MssqlDBConnect = array('ip' => 'ip', 'login' => 'Login', 'password' => 'Password');
$connect = sqlsrv_connect( $MssqlDBConnect["ip"], array( "UID" => $MssqlDBConnect["login"], "PWD" => $MssqlDBConnect["password"]));
if ($connect){
	/* Аккаунты */
	$QueryAcc = "SELECT name FROM AccountServer.dbo.account_login";
	$query = sqlsrv_query($connect, $QueryAcc, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
	$numberAcc = sqlsrv_num_rows($query);
	/* Аккаунты */
	$QueryChar = "SELECT cha_name FROM GameDB.dbo.character";
	$query1 = sqlsrv_query($connect, $QueryChar, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
	$numberChar = sqlsrv_num_rows($query1);
	/* Онлайн */
	$QueryOnline = "SELECT * FROM gamedb.dbo.character WHERE mem_addr > 0";
	$query2 = sqlsrv_query($connect, $QueryOnline, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
	$numberOnline = sqlsrv_num_rows($query2);
}else{
	echo "Ошибка соединения с БД.";
}
?>
Аккаунты - <? echo $numberAcc?></br>
Персонажи - <? echo $numberChar?></br>
Онлайн - <? echo $numberOnline?>

 

Share this post


Link to post
Share on other sites
31 minutes ago, Graf said:

Update!

Вот на sqlsrv(php 7.4 использовал):


<?
$MssqlDBConnect = array('ip' => 'ip', 'login' => 'Login', 'password' => 'Password');
$connect = sqlsrv_connect( $MssqlDBConnect["ip"], array( "UID" => $MssqlDBConnect["login"], "PWD" => $MssqlDBConnect["password"]));
if ($connect){
	/* Аккаунты */
	$QueryAcc = "SELECT name FROM AccountServer.dbo.account_login";
	$query = sqlsrv_query($connect, $QueryAcc, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
	$numberAcc = sqlsrv_num_rows($query);
	/* Аккаунты */
	$QueryChar = "SELECT cha_name FROM GameDB.dbo.character";
	$query1 = sqlsrv_query($connect, $QueryChar, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
	$numberChar = sqlsrv_num_rows($query1);
	/* Онлайн */
	$QueryOnline = "SELECT * FROM gamedb.dbo.character WHERE mem_addr > 0";
	$query2 = sqlsrv_query($connect, $QueryOnline, array(), array( "Scrollable" => SQLSRV_CURSOR_KEYSET ));
	$numberOnline = sqlsrv_num_rows($query2);
}else{
	echo "Ошибка соединения с БД.";
}
?>
Аккаунты - <? echo $numberAcc?></br>
Персонажи - <? echo $numberChar?></br>
Онлайн - <? echo $numberOnline?>

 

А зчем в 3-ем запросе брать все значения? к чему лишняя нагрузка? Есть же count оператор.

Share this post


Link to post
Share on other sites

Если твою страницу будет посещать 100 человек в день, это не будет наносить существенную нагрузку.


Но если к тебе в гости зайдут 5-10к ботов, в игре могут начаться перебои.
Как подметил @V3ct0r, не забывай про кеширование, в таких приложениях оно в базе должно быть.

  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

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

Sign in to follow this  

×
×
  • Create New...