|
Онлайн Статус Собственными Ручищами |
|
|
Ozzy Osbourne |
23.10.2010, 21:09
|
Grandmaster
Сообщений: 2.068
Регистрация: 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 с оформлением данных в виде таблицы.
А вот если статистики совсем нет - тогда читаем ответ ниже.
--------------------
|
|
|
|
|
|
Сообщений в этой теме
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 ImProV1zator
Попробуй выводить никнейм по буквам в столбик, т... 9.11.2019, 9: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 ImProV1zator Разобрался,всем спасибо
<?php
$con=mysqli... 10.11.2019, 3:10 Aimed
Разобрался,всем спасибо
[code]<?php
$con... 10.11.2019, 4:18
4 чел. читают эту тему (гостей: 4, скрытых пользователей: 0)
Пользователей: 0
|
|