В данном уроке мы будем рассматривать ситуацию когда сфера (у меня 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”.
Открываем браузер, вводим 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
Вводим название новой базы данных, а рядом обязательно указываем кодировку полей ”utf8_general_ci” (мы же умные люди и используем только utf8!) и нажимаем ”создать”.
База создалась и появилась в левом меню. Кликаем по названию ”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” (в левой части страницы), а затем на кнопочку ”обзор” - в правой верхней части страницы.
Если все окей и данные в базу добавились - тогда вы их сразу там и увидите:
Если данные есть (т.е. инфа по тем юзерам что были онлайн) - тогда у нас все получилось. Сфера работает, база работает, в базу юзеры добавляются - значит осталось дело за маленьким, выводить информацию на вашем сайте. - В нашем случае ваш сайт это 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> - и вуаля, статистика прямо у вас на экране.
Вы наверное ждали статистику в красивой зеленой табличке, а получили просто данные на экран. Но ведь это самое главное! Теперь вы умеете доставать данные с базы, а оформить их по своему это 10 минут времени и знания хотя бы 1й главы html учебника. Лень? Окей, немного передохну и опубликую в этой статье пример файла index.php с оформлением данных в виде таблицы.
А вот если статистики совсем нет - тогда читаем ответ ниже.