php скрипт - кто сейчас на сайте

Разработка своих веб-приложений и страничек

php скрипт - кто сейчас на сайте

Сообщение On-line » 26 янв 2009, 23:01

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

Преимущества такого скрипта:

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

Недостатки скрипта:

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

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

Код: Выделить всёРазвернуть
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() . '
';
Последний раз редактировалось On-line 11 июл 2009, 00:59, всего редактировалось 1 раз.
Аватара пользователя
On-line
Активный участник
 
Сообщения: 1083
Зарегистрирован: 31 окт 2008, 23:54
Домен: http://vbalashove.ru

Re: php скрипт - кто сейчас на сайте

Сообщение DPX-Infinity » 26 янв 2009, 23:18

молоцца) хорошая и полезная статья. побольше бы таких...
Изображение
Переходите на Jabber! За ним будущее!
Желаю вам опенсорса!
Аватара пользователя
DPX-Infinity
Активный участник
 
Сообщения: 723
Зарегистрирован: 02 сен 2007, 20:45
Откуда: Саратов

Re: php скрипт - кто сейчас на сайте

Сообщение zk » 26 янв 2009, 23:28

Принципиально против копипаста чужих статей ничего не имею, но настаиваю чтобы присутствовали ссылка на источник имя автора.
zk
Администратор
 
Сообщения: 1971
Зарегистрирован: 02 сен 2007, 16:04
Домен: vfose.ru

Re: php скрипт - кто сейчас на сайте

Сообщение On-line » 26 янв 2009, 23:32

zk писал(а):Принципиально против копипаста чужих статей ничего не имею, но настаиваю чтобы присутствовали ссылка на источник имя автора.

Давно скопировал с какого то сайта и сохранил в .txt, недавно разбирался, внес кое какие изминения и решил выложить здесь, так что ссылка утеряна, да и сам скрипт был немного исправлен (скопки и т.д :) ).
Аватара пользователя
On-line
Активный участник
 
Сообщения: 1083
Зарегистрирован: 31 окт 2008, 23:54
Домен: http://vbalashove.ru

Re: php скрипт - кто сейчас на сайте

Сообщение DPX-Infinity » 26 янв 2009, 23:40

даа... а я то думаю что-то подозрительно, раньше такого не было)
оказывается копипаст) тогда без копирайта не очень)
допиши тогда в конец что-то вроде (c) Unknown :)
Изображение
Переходите на Jabber! За ним будущее!
Желаю вам опенсорса!
Аватара пользователя
DPX-Infinity
Активный участник
 
Сообщения: 723
Зарегистрирован: 02 сен 2007, 20:45
Откуда: Саратов

Re: php скрипт - кто сейчас на сайте

Сообщение On-line » 26 янв 2009, 23:44

DPX-Infinity писал(а):допиши тогда в конец что-то вроде (c) Unknown :)

Не стоит :)
Аватара пользователя
On-line
Активный участник
 
Сообщения: 1083
Зарегистрирован: 31 окт 2008, 23:54
Домен: http://vbalashove.ru

Re: php скрипт - кто сейчас на сайте

Сообщение On-line » 26 янв 2009, 23:47

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

Как в исходнике было описано не работало :D Могу скинуть тот .txt если кому не лень попробовать проделать мою работу, думаю желающих не будет, так что копипаст присутствует только в куске кода :)
Аватара пользователя
On-line
Активный участник
 
Сообщения: 1083
Зарегистрирован: 31 окт 2008, 23:54
Домен: http://vbalashove.ru

Re: php скрипт - кто сейчас на сайте

Сообщение JavaExport » 27 янв 2009, 16:18

Ну кинь я хачу посматреть на скрипт в исходнике.
JavaExport
Активный участник
 
Сообщения: 937
Зарегистрирован: 15 сен 2008, 18:45
Домен: http://mobilephone.ixbb.r

Re: php скрипт - кто сейчас на сайте

Сообщение On-line » 27 янв 2009, 16:29

JavaExport писал(а):Ну кинь я хачу посматреть на скрипт в исходнике.

Попробуй переделать :roll:
Такое ощущение как будто из мозгов написали с ошибками, ибо имеются такие не понятные вещи как:
Код: Выделить всёРазвернуть
sesion_save_path

($directoru_handle)

sesion_start()

< MAX_FIDLE_TIME * 3)



}}
echo 'On-line: ' . getnlineUsers() . '
;
?>
:)
Вложения
on-line.zip
файл
(417 байт) Скачиваний: 380
Аватара пользователя
On-line
Активный участник
 
Сообщения: 1083
Зарегистрирован: 31 окт 2008, 23:54
Домен: http://vbalashove.ru

Re: php скрипт - кто сейчас на сайте

Сообщение Rostov114 » 27 янв 2009, 17:48

Брр..работа с файлами...нее...я лучше выберу БД...если скрипт большой то затрата на запрос там не сильно роль играть будут...

P.S. Вначале я думал копипаст моего скрипта.
Некоммерческий проект «HSDN»
Аватара пользователя
Rostov114
Автор
 
Сообщения: 3198
Зарегистрирован: 18 окт 2007, 02:21

След.

Вернуться в PHP, HTML, CSS...

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 128