Graf 210 Report post Posted September 25, 2019 (edited) Добрый вечер. Как-то давно меня очень интересовала статистика сервера. Она была лишь на платных сайтах. Так вот... 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 September 27, 2019 by Graf Quote Share this post Link to post Share on other sites
Chudik 12 Report post Posted October 2, 2019 (edited) Я бы внес корректировку мелкую: <? $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 October 2, 2019 by Chudik Quote По всем вопросам, обращайтесь [email protected] Share this post Link to post Share on other sites
V3ct0r 2,117 Report post Posted October 19, 2019 Привет, @Graf! Хочу дать несколько советов: 1. Ты используешь устаревшие функции mssql_******(), которые удалены в новых версиях PHP (7.0.0 и выше). Сегодня лучше использовать интерфейс PDO; 2. При каждом выполнении твоего скрипта будет выполнено несколько запросов к MSSQL-серверу. Чтобы снизить на сервер нагрузку, можно применить кеширование, т.е. обновлять статистику, например, раз в час; 3. При работе с MSSQL-сервером могут возникать разные ошибки, их лучше проверять и обрабатывать. Quote Some useful links / Полезные ссылки Tips for making a topic in 'Questions & Help' / Рекомендации по созданию тем в разделе "Помощь" Server Advertising Section Rules / Правила раздела "Реклама серверов" Available e-mail domains for registration / Допустимые e-mail домены для регистрации User groups / Группы пользователей User ranks / Звания пользователей "Broken" pictures on the forum / "Битые" изображения на форуме Beware of scammers! / Осторожно, мошенники! My developments / Мои разработки Mods for client and server / Моды для клиента и сервера PKOdev.NET website for Tales of Pirates Server / PKOdev.NET веб-обвязка для сервера Пиратии I do not provide any help in private messages and outside the forum. Use 'Questions & Help' section please. Thank you for understanding! Я не оказываю какую-либо помощь в личных сообщениях и вне форума. Пожалуйста, используйте раздел "Пиратия: Помощь". Благодарю за понимание! Share this post Link to post Share on other sites
Graf 210 Report post Posted January 27, 2021 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?> Quote Share this post Link to post Share on other sites
champ 147 Report post Posted January 27, 2021 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 оператор. Quote Share this post Link to post Share on other sites
Graf 210 Report post Posted January 27, 2021 @patrick13 Можно что-нибудь одно. Это же пример) 1 Quote Share this post Link to post Share on other sites
e1mer 102 Report post Posted February 19, 2021 Если твою страницу будет посещать 100 человек в день, это не будет наносить существенную нагрузку. Но если к тебе в гости зайдут 5-10к ботов, в игре могут начаться перебои. Как подметил @V3ct0r, не забывай про кеширование, в таких приложениях оно в базе должно быть. 1 Quote Share this post Link to post Share on other sites
Graf 210 Report post Posted February 19, 2021 @e1mer Да, так и реализовано. Это чисто для опыта. Quote Share this post Link to post Share on other sites