Здравствуйте, гость ( Вход | Регистрация )

> Онлайн Статус Собственными Ручищами
Полезность материала
Понравилась статья?
Да [ 31 ] ** [73,81%]
Нет [ 1 ] ** [2,38%]
Многобукф [ 10 ] ** [23,81%]
Всего голосов: 42
Гости не могут голосовать 
Ozzy Osbourne
сообщение 23.10.2010, 21:09
Сообщение #1


*********

Grandmaster
Сообщений: 2.067
Регистрация: 5.8.2003
Группа: Пользователи
Наличность: 1
Пользователь №: 810
Возраст: 32



В связи с тем что вопрос создания статуса для сервера на сегодняшний день актуальный и в личку мне пришло пару сообщений по этому поводу - я расскажу вам как его создать своими ручищами при помощи mysql+php и чашки чая

В данном уроке мы будем рассматривать ситуацию когда сфера (у меня 56b), mysql и apache находятся на одной машине (сервере). Такой подход сильнее грузит сферу, но более понятен на старте новичкам.

В качестве сервера может выступать: ваш домашний компьютер, выделенный сервер (ddc) либо виртуальный сервер (vds/vps).
  1. Для начала установим 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 - значит пока что вы все сделали правильно.

  2. Теперь когда mysql и apache мы установили, следует научить сферу работать с базой. Для этого открываем sphere.ini и находим (или добавляем) следующий текст:

    Цитата
    // MySql configuration.
    MYSQL=1
    MySqlHost=localhost
    MySqlUser=root
    MySqlPassword=
    MySqlDatabase=sphere


    По умолчанию пользователь базы данных root с пустым паролем. В качестве названия базы данных я выбрал sphere, её мы создадим позже.

    Теперь запускаем сферу (spheresrv.exe). Если в логе сферы не видим ошибку ”MySQL connect fail” - значит подключение к базе прошло успешно. Закрываем сферу, она нам пока не нужна.

  3. В папке 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 и обновлять в базе текущих пользователей онлайн. Дурные идеи типа живого статуса обновляющегося без задержки - выкиньте нафиг, это сильно убьет вашу базу. Если напрягает пять минут - поставьте одну, но при большом онлайне это будет грузить базу и сервер в целом

  4. Теперь нам понадобится создать эту самую базу ”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)

    Если данные есть (т.е. инфа по тем юзерам что были онлайн) - тогда у нас все получилось. Сфера работает, база работает, в базу юзеры добавляются - значит осталось дело за маленьким, выводить информацию на вашем сайте.

  5. В нашем случае ваш сайт это 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 с оформлением данных в виде таблицы.

    А вот если статистики совсем нет - тогда читаем ответ ниже.


--------------------
Forest Wars
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
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
ImProV1zator   Разобрался,всем спасибо <?php $con=mysqli...   10.11.2019, 3:10
Aimed   Разобрался,всем спасибо [code]<?php $con...   10.11.2019, 4:18


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 19.4.2024, 20:18
Designed by Nickostyle