|
Онлайн Статус Собственными Ручищами |
|
|
Ozzy Osbourne |
23.10.2010, 21:09
|
Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003 Группа: Пользователи Наличность: 0
Пользователь №: 810
Возраст: 32
|
В связи с тем что вопрос создания статуса для сервера на сегодняшний день актуальный и в личку мне пришло пару сообщений по этому поводу - я расскажу вам как его создать своими ручищами при помощи mysql+php и чашки чаяВ данном уроке мы будем рассматривать ситуацию когда сфера (у меня 56b), mysql и apache находятся на одной машине (сервере). Такой подход сильнее грузит сферу, но более понятен на старте новичкам. В качестве сервера может выступать: ваш домашний компьютер, выделенный сервер (ddc) либо виртуальный сервер (vds/vps). - Для начала установим apache+mysql на машину. Для этого мы будем использовать многофункциональный набор xampp (apache+mysql+php+perl). При его установке на нашу машину сразу станет нужный нам апач и mysql. Почитать подробнее можно на вики (http://ru.wikipedia.org/wiki/XAMPP)
Заходим на официальный сайт в раздел Windows (http://www.apachefriends.org/en/xampp-windows.html) и качаем XAMPP Windows [EXE]
После того как скачали - открываем и устанавливаем, к примеру на C:\xampp
На рабочем столе находим ярлычек ”XAMPP Control Panel” и запускаем. Он нам открываем xampp панельку. Тыкаем на кнопку ”start” возле ”apache” и ”mysql”. Спустя пару секунд службы стартанут, а рядом станут активны кнопки ”admin”.
(IMG:http://automum.od.ua/uosoft/1.jpg)
Открываем браузер, вводим http://localhost/ в поле адреса, если на экране видим приветствие от xampp - значит пока что вы все сделали правильно.
- Теперь когда mysql и apache мы установили, следует научить сферу работать с базой. Для этого открываем sphere.ini и находим (или добавляем) следующий текст:
Цитата // MySql configuration. MYSQL=1 MySqlHost=localhost MySqlUser=root MySqlPassword= MySqlDatabase=sphere
По умолчанию пользователь базы данных root с пустым паролем. В качестве названия базы данных я выбрал sphere, её мы создадим позже.
Теперь запускаем сферу (spheresrv.exe). Если в логе сферы не видим ошибку ”MySQL connect fail” - значит подключение к базе прошло успешно. Закрываем сферу, она нам пока не нужна.
- В папке scripts находим файл sphere_serv_triggers.scp и открываем его блокнотом к примеру. Находим в нем функцию ”f_onserver_timer” и добавляем в конец:
Цитата IF (<DB.Connected>==0) DB.Connect DB.Query "SET NAMES utf8" DB.Query "SET CHARACTER SET utf8" DB.Query "SET character_set_client='utf8'" DB.Query "SET character_set_connection='utf8'" DB.Query "SET character_set_results='utf8'" RETURN 0 ENDIF
DB.Execute "DELETE FROM clients" FOR i 0 <EVAL (<SERV.Clients>-1)> IF (<SERV.Client.<LOCAL.i>.IsOnline>==1) DB.Execute "INSERT INTO clients VALUES ("<SERV.Client.<LOCAL.i>.UID>","<SERV.Client.<LOCAL.i>.Name>","<SERV.Client.<LOCAL.i>.MEMORYFINDTYPE.memory_guild.LINK.ABBREV>",<SERV.Client.<LOCAL.i>.Karma>,<SERV.Client.<LOCAL.i>.Fame>,<SERV.Client.<LOCAL.i>.Kills>,<FVAL <SERV.Client.<LOCAL.i>.SkillTotal>>)"" ENDIF ENDFOR
Если функцию f_onserver_timer не нашли - ничего страшного, создайте её [FUNCTION f_onserver_timer] в конце файла (перед [eof]) и добавьте тот код что я написал выше.
В двух словах расскажу что мы сделали. Мы определили функцию f_onserver_timer которая автоматически запускается сферой каждые N минут и проводит указанные действия. В данном случае функция проверяет есть ли подключение к базе, если есть: а) очищает таблицу clients. б) добавляет всех пользователей что сейчас онлайн в таблицу clients
По умолчанию запуск f_onserver_timer в сфере отключен, поэтому открываем sphere.ini и находим:
Цитата // Amount of minutes to call f_onserver_timer (0 disables this, default) TimerCall=0
Я устанавливаю значение в 5 минут:
Цитата // Amount of minutes to call f_onserver_timer (0 disables this, default) TimerCall=5
Это означает что каждые 5 минут будет запускатся функция f_onserver_timer и обновлять в базе текущих пользователей онлайн. Дурные идеи типа живого статуса обновляющегося без задержки - выкиньте нафиг, это сильно убьет вашу базу. Если напрягает пять минут - поставьте одну, но при большом онлайне это будет грузить базу и сервер в целом
- Теперь нам понадобится создать эту самую базу ”sphere” и таблицу ”clients”. Запускаем с рабочего стола ярлычек ”Xampp Control panel” и нажимаем кнопку ”admin” рядом с ”mysql”. Нам открываем популярный инструмент для работы с базами - phpmyadmin
(IMG:http://automum.od.ua/uosoft/2.jpg)
Вводим название новой базы данных, а рядом обязательно указываем кодировку полей ”utf8_general_ci” (мы же умные люди и используем только utf8!) и нажимаем ”создать”.
(IMG:http://automum.od.ua/uosoft/3.jpg)
База создалась и появилась в левом меню. Кликаем по названию ”sphere (0)” и нам открывается страница таблиц этой базы. Естественно таблиц у нас там не каких еще нету. Так как у нас урок для новичков, рассказывать как в ручную создавать поля для таблицы и тп я не буду (хотя это достаточно просто), поэтому просто нажимайте кнопку ”SQL” в менюшке вверху и в появившемся окошке вводите следующий код:
Цитата CREATE TABLE IF NOT EXISTS `clients` ( `uid` varchar(255) NOT NULL, `name` varchar(255) NOT NULL, `ABBREV` varchar(255) NOT NULL, `karma` varchar(255) NOT NULL, `fame` varchar(255) NOT NULL, `kills` varchar(255) NOT NULL, `SkillTotal` varchar(255) NOT NULL, ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Нажимаем ОК и наша таблица создана.
Запускаем нашу сферу, конектимся к ней хотя бы одним чаром и идем курить на указанный ”TimerCall” минут. Только окошко с phpmyadmin не закрывайте, еще понадобится.
Когда указанное время истекло и функция добавление чаров в базу уже отработала - открываем нами любимый phpmyadmin и тыкаем на название таблицы ”clients” (в левой части страницы), а затем на кнопочку ”обзор” - в правой верхней части страницы.
(IMG:http://automum.od.ua/uosoft/5.jpg)
(IMG:http://automum.od.ua/uosoft/6.jpg)
Если все окей и данные в базу добавились - тогда вы их сразу там и увидите:
(IMG:http://automum.od.ua/uosoft/4.jpg)
Если данные есть (т.е. инфа по тем юзерам что были онлайн) - тогда у нас все получилось. Сфера работает, база работает, в базу юзеры добавляются - значит осталось дело за маленьким, выводить информацию на вашем сайте.
- В нашем случае ваш сайт это http://localhost/ (локальный) или <a href=\"http://ваш_реальный_ip\" target=\"_blank\"><a href="http://ваш_реальный_ip" target="_blank">http://ваш_реальный_ip</a></a> (доступный для всех юзеров интернета). Открываем папку где устанавливали xampp (C:\xampp ?), открываем там папку htdocs и удаляем все что там внутри.
Создаем файлик index.php следующего содержания:
Цитата <?php // тут я указал наши данные для подключения к mysql $link = mysql_connect('127.0.0.1', 'root', ''); if (!$link) { die('Could not connect: ' . mysql_error()); } // название нашей базы mysql_select_db("sphere"); // далем запроса в базу на получение всех пользователей $result = mysql_query("SELECT * FROM `clients` WHERE 1"); // тег pre - для красивого вывода echo '<h1>Статистика</h1><pre>'; // пробегаем по полученному массиву где $row это текущий пользователь while ($row = mysql_fetch_assoc($result)) { // выводим данные пользователя на экран print_r($row); } // закрываем тег echo '</pre>'; // закрываем соединение с базой mysql_close($link);
Теперь открываем браузер, вводим <a href="http://ваш_реальный_ip" target="_blank"><a href="http://ваш_реальный_ip" target="_blank">http://ваш_реальный_ip</a></a> - и вуаля, статистика прямо у вас на экране.
(IMG:http://automum.od.ua/uosoft/7.jpg)
Вы наверное ждали статистику в красивой зеленой табличке, а получили просто данные на экран. Но ведь это самое главное! Теперь вы умеете доставать данные с базы, а оформить их по своему это 10 минут времени и знания хотя бы 1й главы html учебника. Лень? Окей, немного передохну и опубликую в этой статье пример файла index.php с оформлением данных в виде таблицы.
А вот если статистики совсем нет - тогда читаем ответ ниже.
--------------------
|
|
|
|
|
|
Ответов
Aimed |
10.11.2019, 4:18
|
Grandmaster
Сообщений: 2.250
Регистрация: 29.12.2012 Группа: Пользователи Наличность: 8675
Пользователь №: 15.607
|
Цитата(ImProV1zator @ 10.11.2019, 1:10) Разобрался,всем спасибо Код <?php $con=mysqli_connect("localhost","my_user","my_password","my_db"); // Check connection if (mysqli_connect_errno()) { echo "Failed to connect to MySQL: " . mysqli_connect_error(); }
$sql="SELECT name FROM clients ORDER BY name";
if ($result=mysqli_query($con,$sql)) { // Return the number of rows in result set $rowcount=mysqli_num_rows($result); printf("Result set has %d rows.\n",$rowcount); // Free result set mysqli_free_result($result); } mysqli_close($con); ?> У тебя там count() не используется. Код SELECT COUNT(name) FROM clients; Тебе вернется результат с 1 записью и 1 столбцом - количество записей в таблице clients. То что ты сделал будет тоже работать. Но нахрена все имена из таблицы тащить и потом через пхп их считать, если можно просто попросить базу посчитать. Либо как вариант там где ты таблицу онлайн статуса делаешь, ты там все равно все записи уже тащишь. Просто их посчитай, не делай новый запрос в базу. Цитата(ImProV1zator @ 10.11.2019, 0:51) Это как выбрать ячейки понятно Код SELECT COUNT(column_name) FROM table_name WHERE condition;
Не очень понятно как грамотно прописать where и echo, как вывести дальше? WHERE не является обязательным. Вот тут конкретный пример есть и можно посмотреть как работает.
|
|
|
|
Сообщений в этой теме
DAMNED KING Онлайн Статус Собственными Ручищами 23.10.2010, 21:09 DAMNED KING Вопрос: Открываю http://мой_реальный_ип/ и вижу то... 23.10.2010, 21:21 DAMNED KING Для вывода статуса в виде таблички - немного меняе... 23.10.2010, 21:34 Mirage Тема нормальная.
Только хотелось бы узнать в чем с... 24.10.2010, 16:14 DAMNED KING
Только хотелось бы узнать в чем существенные преи... 24.10.2010, 16:37 Destruction
Позволю себе не согласиться. Нагрузка будет выше ... 24.10.2010, 17:25 Mirage
MySQL хранит данные в файлах, если вы не знали.
В... 24.10.2010, 20:39 Kanibal Постоянно выскакивает вот это:
24.10.2010, 17:56 Soteric
Наверное запятая здесь на конце не нужна
--
А э... 24.10.2010, 18:36 DAMNED KING to Destruction
Ох как я не люблю этот бредовый фл... 24.10.2010, 18:45 Kanibal А это пчему выскакивает:
:blink: ? 24.10.2010, 19:17 DAMNED KING Почему то у тебя :
Не отрабатывает. Сделай вот та... 24.10.2010, 19:19 Destruction Я был вежлив.. и буду :)
В ответ на твое мнение о... 24.10.2010, 23:02 DAMNED KING Хватит засорять тему всяким бредом? Ага?
Людей ко... 24.10.2010, 23:26 Warstone Мда.. DAMNED KING, ты какой шард держишь-то? Мне п... 25.10.2010, 11:02 Phistan DAMNED KING, советую не обращать на них внимания, ... 25.10.2010, 11:22 remiks Очень полезный материал приношу свою благодарность... 25.10.2010, 14:24 Mirage Поправьте меня если я ошибаюсь но мне кажется Dest... 25.10.2010, 15:10 DAMNED KING
Мда.. DAMNED KING, ты какой шард держишь-то? Мне ... 25.10.2010, 15:28 inkvizitor MySQL query "INSERT INTO clients VALUES (... 28.3.2011, 11:18 Ozzy Osbourne попробуй так:
DB.Execute "INSERT INTO clients... 28.3.2011, 12:01 wap LOL. :) У вас же скобки не хватает:
<FVAL <S... 28.3.2011, 12:10 Ozzy Osbourne
LOL. :) У вас же скобки не хватает:
<FVAL ... 28.3.2011, 12:14 inkvizitor
LOL. :) У вас же скобки не хватает:
<FVAL ... 28.3.2011, 12:57 ImProV1zator а как сюда впихнуть
<FVAL <SERV.Client.<L... 15.7.2011, 12:38 ImProV1zator пробавал вот так
'<SERV.Client.<LOCAL.i... 16.7.2011, 20:39 ImProV1zator разобрался
'<db.escapedata <SERV.Client.... 16.7.2011, 20:50 optima171 Ставлю ан 56б под хампп, но выдяёт ошибку когда за... 10.2.2012, 15:53 WRWR CREATE TABLE IF NOT EXISTS `clients` ... 3.3.2013, 23:34 Ozzy Osbourne Угу конечно, был молод и глуп :)
Вобще если бы пи... 4.3.2013, 20:35 WRWR только не координально а кардинально :) 5.3.2013, 2:56 fantasyuo 00:03:ERROR:(sphere_serv_triggers.... 1.12.2014, 1:06 fantasyuo
00:03:ERROR:(sphere_serv_triggers... 23.1.2015, 17:11 Sirocco
UP
из-за системы счисления, и/или версии сферы. 23.1.2015, 23:46 Llirik Нет тут походу надо написать что-то типа:
IF ... 28.6.2018, 1:20 ImProV1zator В базу записывает чаров, но из базы php скрипт не ... 1.11.2019, 17:05 ImProV1zator <?php
$link = mysqli_connect('loc... 1.11.2019, 19:14 $yst3m_3rr0r Давай на PDO перейдем ... более универсальна
1... 2.11.2019, 0:10 ImProV1zator query("SELECT * FROM `clients` ORD... 2.11.2019, 3:27 Aimed
query("SELECT * FROM `clients` OR... 3.11.2019, 19:14 ImProV1zator
Что такое "движок сайта"?
CMS (Content... 4.11.2019, 6:15 ImProV1zator На Html таже самая ошибка... 4.11.2019, 10:02 Juzzver
И чем это тебе мешает?
В phpMyAdmin зайди на сай... 4.11.2019, 11:40 ImProV1zator На Dle не меняется кодировка,если ее поменять то в... 4.11.2019, 12:10 Aimed Т.е. база данных это теперь движок сайта?))))
А ка... 4.11.2019, 14:04 ImProV1zator Help
не отображает статус
база sphere, подбаза cli... 6.11.2019, 3:05 ImProV1zator Может надо что то в .htacces прописать, чтобы php ... 6.11.2019, 5:34 ImProV1zator Сделал сортировку по именам, но таблица сбивается ... 6.11.2019, 16:36 Aimed
1.
Notice: Undefined index: Name in /home... 6.11.2019, 18:43 $yst3m_3rr0r
Сделал сортировку по именам, но таблица сбивается... 7.11.2019, 1:49 ImProV1zator
Ну, таблицу уже сам состряпаешь с помощью HTML ... 7.11.2019, 3:28 Aimed
Ну, таблицу уже сам состряпаешь с помощью HTML и ... 7.11.2019, 12:47 Aimed
бл** зачем редактировать сообщение... 6.11.2019, 20:20 ImProV1zator Получилось только вот так:
https://ibb.co/tMjXN8z 7.11.2019, 3:50 ImProV1zator Сделал вертикальную таблицу
<table>
<t... 7.11.2019, 4:02 Juzzver
Сделал вертикальную таблицу
https://ibb.co/YdkF3h... 7.11.2019, 22:41 $yst3m_3rr0r
Сделал вертикальную таблицу
[url=https://ibb.co/Y... 8.11.2019, 3:06 ImProV1zator Спасибо, но мне больше нравится вертикальный вариа... 9.11.2019, 2:25 $yst3m_3rr0r
А что б SQL селект написать и пыхой сгенерировать... 7.11.2019, 17:01 Juzzver
Попробуй выводить никнейм по буквам в столбик, т... 9.11.2019, 6:31 ImProV1zator
Попробуй выводить никнейм по буквам в столбик, т... 9.11.2019, 9:12 Aimed
Попробуй выводить никнейм по буквам в столбик, т... 9.11.2019, 14:12 ImProV1zator У меня вопрос, как сделать чтобы выводилось число ... 9.11.2019, 9:42 alfapvp Я смотрю многие тут ка кфраера сидят на форуме.
ка... 9.11.2019, 22:14 Aimed
Я смотрю многие тут ка кфраера сидят на форуме.
к... 9.11.2019, 23:00 ImProV1zator Это как выбрать ячейки понятно
SELECT COUNT(co... 10.11.2019, 2:51
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|