Создайте к примеру файл, и назовите его online.inc.php
Как создали переписываем туда листинг файла. Каменты к коду идут походу написания.
/* Счётчик онлайн, original idea & coding by DikS aka GOODBYTE */
# 1) Сначало обьявим функцию, назовем ей просто online() или можно её посвятить кому-нибудь, вобщем назовите её как хотите.
function count_users_online((boolean)$flag=TRUE) # Зачем мы указали там переменную $flag=TRUE ? Это будет формат вывода данных. Тобишь, count_users_online(false) - выведет список онлайн, с подробным количеством пользователей, то есть ихними юзерагентами (телефонами) и датой последнего перехода, а count_users_online(true) или просто count_users_online() выведет простую цифру кол-ва пользователей на сайте. :)
{
# 2) Выделим главные переменные, для написания счётчика.
# $ua = $_SERVER['HTTP_USER_AGENT'] - UA пользователя (не Украина а юзер агент!!)
# $ip = $_SERVER['REMOTE_ADDR'] - IP-адрес пользователя.
# $timestamp = time() - Текущее время в секундах. :)
$ua = trim($_SERVER['HTTP_USER_AGENT']);
$ip = $_SERVER['REMOTE_ADDR'];
$timestamp = time();
# Ну переменные вроде бы определили. Что дальше? А дальше надо как-то зашифровать их, то есть закодировать в небольшую строку.
# Сделаем это с помощью md5-шифрования. Делается оно через вызов функции md5($text_for_encoding) :)
$hash = md5($ua.'|'.$ip); # В качестве разделителя переменных у нас выступает знак "|"
/* проверяем на существование такого файла в папке. */
if(file_exists('./online/'.$hash)) # Проверяем есть ли такой файл в папке online
{
/* если файл есть, то обновляем ему время модификации.
Время модификации выступает у нас в качестве времени пользователя в онлайн. ))
*/
touch('./online/'.$hash, $timestamp); # Изменили время модификации с помощью функции touch() :)
} else {
/* если файла такого нет, то создаем его. */
$fp = fopen('./online/'.$hash, 'w+');
# Создать только файл мало, нужно вписать туда еще и UA и IP пользователя.
# Для этого создадим переменную, с содержимым файла.
$input_var = $ua."\n"; # \n - знак переноса на следующую строку.
$input_var .= $ip."\n"; # .= - кто не знает, является не ПРИРАВНИВАЕМ значения, а добавлением содержимого к уже заданной переменной.
/* переменные сформированы, теперь можно записать это в файл. */
fputs($fp,$input_var); # Записываем.
fclose($fp); # Закрываем файл поскольку он нам уже не понадобится.
}
# Со второй задачей можно считать что справились. Теперь переходим к следующей части, а именно к выводу количества пользователей в онлайн, и главное - к удалению "старых" записей..
# 3) Вывод содержимого на экран, и "грязная работа"
# В рамках этой статьи я не стал использовать функции типа glob() или scandir() а решил использовать старую но надежную связку readdir + opendir + и цикл while =)
$opened_directory = opendir('./online/') or die('Script Error: При открытии папки произошла ошибка!'); # Открываем папку online, если она по каким-то причинам не доступна - высвечиваем сообщение об ошибке, и останавливаем скрипт, по скольку дальнейшая его работа будет не предсказуема. :(
# Грамотнее было бы сделать такую же проверку и при записи файла, но тут лишь дело вкуса:)
# Открываем цикл while, $user - это файл записи.
while($user = readdir($opened_directory))
{
if($user != '.' && $user != '..') # Данные точки являются необходимыми атрибутами файловой системы, только эти атрибуты ах[цензура]но мешают кодерам. Мы их убираем путем создания условия.
{
# Для вывода, нам нужно создать некую переменную наподобе счётчика, которая бы записывала посетителей онлайн, назовём её $counter .
if(!isset($counter)) $counter = 0; # Обьявили переменную, если она не существовала.
if($flag == FALSE && !isset($string)) $string = ''; # данная переменная нам нужна для записи пользователей при наличии специального флага в вызове функции. Об этом говорилось еще в начале статьи :)