Как будет реализовываться механизм подсчета посетителей онлайн? Есть два способа.
- С помощью IP адреса посетителя. Как вы понимаете, разные посетители обычно имеют разные IP.
- С помощью сессий PHP. Для каждого посетителя заводится уникальная сессия.
Второй вариант является, на мой взгляд, более удачным, так что позвольте мне использовать именно его. Ну, начнем.
Для начала создадим файл, который будет заменять нам базу данных, и назовем его base.txt. Далее, в каком либо другом файле, например online.php, пишем сам скрипт.
session_set_cookie_params('0');
$id = session_id();
Мы открываем новую сессию (или продолжаем, если она уже открыта), затем "прячем" сессию в cookie, чтобы пользователю не мешали страшные URL, а ID сессии присваиваем соответствующей переменной.
$CurrentTime = time();
$LastTime = time() - 480;
$base = "base.txt";
Присваиваем переменной $CurrentTime текущее время в секундах с 1970 года, а $LastTime - время, на 8 минут меньшее текущего. Если пользователь был неактивен в течение 8 минут, то его сессия будет удаляться. Далее мы определяем файл-базу base.txt. Там мы будет хранить необходимые данные в следующей форме:
ID сессии1|Время последней активности
ID сессии2|Время последней
активности
Затем мы формируем массив из строк данного файла.
$file = file($base); $k = 0; for ($i = 0; $i < sizeof($file); $i++) { $line = explode("|", $file[$i]); if ($line[1] > $LastTime) { $ResFile[$k] = $file[$i]; $k++; } }
Запускаем цикл, в котором каждую строку поочередно "разбиваем" символом |, формируя массив $line. После сравниваем время последней активности посетителя данной сессии с допустимой (т.е. на 8 минут меньше текущего времени). Если это условие соблюдается, то данная строка файла-базы записывается в новый формируемый массив $ResFile, если же время последней активности старее допустимой, то такая строка игнорируется (то есть фактически удаляется). Далее мы будем иметь дело только с новым массивом $ResFile.