Главная | Форум | Статьи | Фaйлы| Картинки WoW | Профиль | Регистрация | Вход

[ Новые сообщения · Правила форума · Поиск · RSS ]

WoW-Info — информационный World of Warcraft портал

Самый быстрый способ определить количество пользователей на - Форум

  • Сторінка 1 з 1
  • 1
Самый быстрый способ определить количество пользователей на
DiyvolДата: Четвер, 23.12.2010, 03:23 | Сообщение # 1



Diyvol
ЗлОй-АйТИшник
Центурион
Группа: Best of the Best user Wow-info
Сообщений: 356

Замечания:

Оффлайн
Преимущества

Ему не нужна реляционная база данных, что согласитесь, в нашем Рунете (я имею в виду относительно бесплатную его часть), является несомненным преимуществом.
Опять же несомненным преимуществом является скорость. Я не поленился написать подобный скрипт с использованием БД и при помощи функции microtime() (в самом низу – результат ее работы – «Время генерации: …») измерил время выполнения:

Используя сессии – 0,7 мс
Используя БД – 14,2 мс

То есть преимущество в скорости – более чем в 19 раз! Вы можете сказать : «Тоже мне большое дело. Всего 13 мс разница», да они будут правы – а если посещаемость большая? Растет нагрузка на сервер и тогда действительно такое преимущество становится очевидным.
Еще одно преимущество – то, что информация в сессиях хранится пока не закрыт браузер или 1440 секунд (стоит по умолчанию в php.ini), в БД информацию о юзерах вам пришлось бы удалять вручную.
И последнее – простота, чтобы объявить сессию достаточно вызвать функцию session_start(), а чтобы настроить правильных образом БД нужно написать целых 15 строк кода.

Недостатки

Нет детальной статистики – в сможете только узнать количество пользователей в данный момент, для ведения статистики (хиты, хосты…) придется все-таки работать с БД.
Нужен PHP4 – как это ни парадоксально – еще не все хостеры поставили себе PHP4.

Собственно скрипт:

Code
<?Php
session_start();
define("MAX_IDLE_TIME", 3);
function getOnlineUsers(){
if ( $directory_handle = opendir( session_save_path() ) ) {
$count = 0;
while ( false !== ( $file = readdir( $directory_handle ) ) ) {
if($file != '.' && $file != '..'){
if(time()- filemtime(session_save_path() . '\' . $file) < MAX_IDLE_TIME * 60) {
$count++;
}
} }
closedir($directory_handle);
return $count;
} else {
return false;
}}
echo 'Пользователей онлайн: ' . getOnlineUsers() . '<br />';
?>

ЗАМЕЧАНИЕ: Если у вас нет специальной директории для хранения сессий, просто сразу первой строчкой добавьте:

Code
session_save_path("/path/to/custom/directory");

Теперь пройдемся по отдельным частям кода:

Code
session_start();

Следующая строка кода - это объявление некоторой константы, в течении которой пользователи будет считаться активными, то есть присутствующими в данный момент на сайте. В нашем примере - 180 секунд, то есть, если пользовательь не перешел на новую страницу или не перезагрузил эту в течении 3 минут, то он считается ушедшим с сайта и мы его уже не учитываем:

Code
define("MAX_IDLE_TIME", 3);

Теперь мы объявляем функцию getonlineuser() и сразу открываем "сессионную" директорию:

Code
function getOnlineUsers(){  

if ( $directory_handle = opendir( session_save_path() ) ) {

Далее идет часть кода, которая собственно и отвечает за подсчет пользователей, функция возвращает кол-во пользователей онлайн:

Code
$count = 0;  
while ( false !== ( $file = readdir( $directory_handle ) ) ) {  
if($file != '.' && $file != '..'){  
if(time()- filemtime(session_save_path() . '' . $file) < MAX_IDLE_TIME * 60) {  
$count++;  
}  
}  
closedir($directory_handle);  

return $count;  

} else {  
return false;  
}  

}

И пожалуй, разумно будет вывод количества юзеров в конце:

Code
echo 'Онлайн юзеров: ' . getOnlineUsers() . '<br />';

Все! Скрипт готов!




Веб-дизайнер.
Работа, учеба и тренажерный зал. Жизнь это когда ты рад тому, что ты устал. Я не вижу смысла в жизни наркоманов. Наркотик в роли пастуха для всех этих баранов. Я иду вперед и не думаю сворачивать.
 
  • Сторінка 1 з 1
  • 1
Пошук:

Новые сообщения в темах
Сдам в аренду сервер и хостинг · (Хост Предложения)
Автор: redlaine
Последнее сообщение в 23:53
хаха :D · (Приколы)
Автор: [N1ke]Medved
Последнее сообщение в 18:40
Autobattle - новый боевой бот ... · (Боты для WoW)
Автор: terrikon
Последнее сообщение в 18:39
PvE руководство для Чернокнижн... · (Чернокнижник)
Автор: Darkensand
Последнее сообщение в 18:38
Пустой свиток (Часть 11) · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:37
Друиды в Катаклизме: Официальн... · (Друид)
Автор: Darkensand
Последнее сообщение в 18:37
[Баг 3.3.5] Фарм ледяных бадже... · (Читы для WoW)
Автор: Darkensand
Последнее сообщение в 18:35
FarmBot (Бот для фарма руды и ... · (Боты для WoW)
Автор: homma
Последнее сообщение в 18:34
Почему мы сражаемся: ролевая и... · (Воин)
Автор: Darkensand
Последнее сообщение в 18:34
Книги по Wold of Warcraft · (Истории WoW)
Автор: R_a_Z_o_R
Последнее сообщение в 18:33
Маг огня в Cataclysm · (Маг)
Автор: Darkensand
Последнее сообщение в 18:33
Как начать играть в World of W... · (Полезно знать)
Автор: Belkmondesh
Последнее сообщение в 18:32
Характеризация профессий · (Профессии)
Автор: Darkensand
Последнее сообщение в 18:31
Что значит для арканов бета те... · (Маг)
Автор: Darkensand
Последнее сообщение в 18:31

Контакты Контакты Copyright WoW-Info — World of Warcraft портал © 2025 | Условия и правила использования ресурса | Реклама / Услуги
WoW-Info портал.World of Warcraft портал — готовые сервера, сайты, картинки, аддоны, патчи, читы, баги, mangos, ArcEmu, TrinityCore, Warcraft 3, новости, Cataclysm...
Яндекс.Метрика Хостинг від uCoz