Открыть меню    

Сколько пользователей онлайн? Подсчитываем при помощи PHP

Для начала нам понадобится база данных - тут я полностью полагаюсь на ваше усмотрение. В базе данных создайте таблицу (например, useronline) с тремя столбцами. Имена столбцов следующие: timestamp, ip и file. Теперь откройте ваш PhpMyAdmin и добавьте в текстовое окно следующий код.

sql


CREATE TABLE useronline (
timestamp int(15) DEFAULT '0' NOT NULL,
ip varchar(40) NOT NULL,
file varchar(100) NOT NULL,
PRIMARY KEY (timestamp)
);

Вышеприведенный код я постарался создать максимально простым для понимания. Комментарии не влияют на исполнение скрипта (//comment), поэтому при необходимости вы можете их удалить. Скрипт довольно простой: получаем сведения о сервере и текущем времени. Заполняем таблицу useronline соответствующими значениями и выводим предупреждение в случае ошибки. Когда пользователь покидает сайт, удаляем запись на пользователя в таблице useronline, в противном случае выводим сообщение с ошибкой. Все просто и довольно приблизительно, но вместе с тем позволяет хоть как-то определить число пользователей (онлайн) на сайте. В комментарии вы можете привести ссылки на альтернативные статьи по подсчету онлайн посетителей, спасибо за внимание.

PHP



<?php
//Основные характеристики вашего сервера
$server = "localhost"; // localhost
$db_user = "username"; // MySQL база данный - имя
$db_pass = "password"; //MySQL база данных  - пароль
$database = "users";
$timeoutseconds = 300;

$timeoutseconds = 300;
$timestamp = time();
$timeout = $timestamp-$timeoutseconds;
$ip = $_SERVER['REMOTE_ADDR']; // ip адрес пользователя
$serv_self = $_SERVER['PHP_SELF']; // имя страницы  от корня
$insert = mysql_query("INSERT INTO useronline VALUES
('$timestamp','$ip','$serv_self')");
if(!($insert)) {
print "Вставка в таблицу  не удалась \n";
}
$delete = mysql_query("DELETE FROM useronline WHERE timestamp<$timeout");
if(!($delete)) {
print "Ошибка при удалении записи в таблице \n";
}
$result = mysql_query( "SELECT DISTINCT ip FROM useronline WHERE file='$serv_self'");
if(!($result)) {
print "Запрос не  удался \n";
}
$user = mysql_num_rows($result);
//mysql_close();
if($user == 1) {
print("Онлайн: $user \n");
} else {
print("Онлайн: $user \n");
?>

P.S. Нашел в интернете похожий скрипт, но на ООП, если кто заинтересуется, пожалуйста:
php-users-online

Комментарии к статье

аватарка пользователя
2016-02-11
Виктор

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

Добавить комментарий к сниппету