» Форма входа

»Мoy-weB ver.4.1

» Статистика

Главная » 2008 » Сентябрь » 20 » И кто там у нас сейчас на сайте...

И кто там у нас сейчас на сайте...
20.Сен.2008 | 17:13:59

И кто там у нас сейчас на сайте...


Наверное, путешествуя в Сети, вы не раз натыкались на подобного типа
надпись «Сейчас на сайте 99 человек», что означает, что кроме вас в
данный момент этот сайт просматривает 98 человек. Скорее всего, вы
хотели написать такую вещь, но не знали как. Следующая статья покажет
как самому написать скрипт, считающий количество посетителей на сайте в
данный момент, то есть онлайн.

В
Интернете много готовых скриптов, позволяющих считать пользователей
онлайн, но раз вы читаете эту статью, значит, вы как и я не особо
любите ковыряться в чужом коде. Ну, в таком, случае, давайте, напишем
такой скрипт сами. Но прежде поговорим о его преимуществах и
недостатках.

Преимущества.


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

Недостатки.


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

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


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()- fileatime(session_save_path() . '' . $file) < MAX_IDLE_TIME * 60) {
$count ;
}
} }
closedir($directory_handle);
return
$count;
} else {
return
false;
}}
echo
'Пользователей онлайн: ' . getOnlineUsers() . '
'
;
?>


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


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


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


session_start();


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


define("MAX_IDLE_TIME", 3);


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


function getOnlineUsers(){

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


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


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

return
$count;

} else {
return
false;
}

}



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


echo 'Онлайн юзеров: ' . getOnlineUsers() . '
'
;
Категория: Статьй и уроки | Просмотров: 495 | Добавил: CorsaR
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]