ООП   PHP   web   4GL - визуальные среды

Практика пограммирования скриптов на PHP

Сейчас на сайте

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

Как будет реализовываться механизм подсчета посетителей онлайн? Есть два способа.

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

Ну, начнем.

Для начала создадим файл, который будет заменять нам базу данных, и назовем его base.txt. Далее, в каком либо другом файле, например online.php, пишем сам скрипт.

<?
session_start();
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.

for ($i = 0; $i<sizeof($ResFile); $i++) {
$line = explode("|", $ResFile[$i]);
if ($line[0]==$id) {
$line[1] = trim($CurrentTime)."\n";
$is_sid_in_file = 1;
}
$line = implode("|", $line);
$ResFile[$i] = $line;
}

Первые две строки полностью аналогичны предыдущей записи. Далее мы сравниваем ID сессии, записанным в файле, с текущим ID. Если они равны, то обновляем время последней активности, делая его равным текущему. Затем мы заводим переменную $is_sid_in_file, которая будет сигнализировать о том, что данный ID сессии уже есть в файле, и присваиваем ей единицу. После мы превращаем полученный массив в строку и присваиваем ее все тому же массиву $ResFile. Таким образом, мы полностью "прочесали" массив, разбирая каждую строку, и независимо от того, была ли изменена эта строка или нет, обратно возвращаем ее на то же место в массиве $ResFile.

$fp = fopen($base, "w");
for ($i = 0; $i<sizeof($ResFile); $i++) {
fputs($fp, $ResFile[$i]);
}
fclose($fp);

Переписываем файл-базу, сохраняя там новый модифицированный массив $ResFile.

А теперь рассмотрим случай, если текущего ID сессии нет в файле. Тогда мы его просто добавляем:

if (!$is_sid_in_file) {
$fp = fopen($base, "a-");
$line = $id."|".$CurrentTime."\n";
fputs($fp, $line);
fclose($fp);
}

Записи-перезаписи закончены и нам остается только вывести количество открытых сессии, а значит и количество посетителей на сайте в данный момент. Так как число таких сессий равно количеству строк в файле, то пишем:

$file = file($base);
echo sizeof($file);
?>

Вот и все. Подключите данный скрипт на каждой странице вашего сайта а вы всегда сможете определить количество человек на сайте в данную минуту.

ООП   PHP   web   4GL - визуальные среды

Знаете ли Вы, как разрешается парадокс Ольберса?
(Фотометрический парадокс, парадокс Ольберса - это один из парадоксов космологии, заключающийся в том, что во Вселенной, равномерно заполненной звёздами, яркость неба (в том числе ночного) должна быть примерно равна яркости солнечного диска. Это должно иметь место потому, что по любому направлению неба луч зрения рано или поздно упрется в поверхность звезды.
Иными словами парадос Ольберса заключается в том, что если Вселенная бесконечна, то черного неба мы не увидим, так как излучение дальних звезд будет суммироваться с излучением ближних, и небо должно иметь среднюю температуру фотосфер звезд. При поглощении света межзвездным веществом, оно будет разогреваться до температуры звездных фотосфер и излучать также ярко, как звезды. Однако в дело вступает явление "усталости света", открытое Эдвином Хабблом, который показал, что чем дальше от нас расположена галактика, тем больше становится красным свет ее излучения, то есть фотоны как бы "устают", отдают свою энергию межзвездной среде. На очень больших расстояниях галактики видны только в радиодиапазоне, так как их свет вовсе потерял энергию идя через бескрайние просторы Вселенной. Подробнее читайте в FAQ по эфирной физике.

НОВОСТИ ФОРУМАФорум Рыцари теории эфира
Рыцари теории эфира
 13.11.2019 - 11:05: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> РАСЧЕЛОВЕЧИВАНИЕ ЧЕЛОВЕКА. КОМУ ЭТО НАДО? - Карим_Хайдаров.
12.11.2019 - 19:36: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Марины Мелиховой - Карим_Хайдаров.
12.11.2019 - 19:34: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Светланы Вислобоковой - Карим_Хайдаров.
12.11.2019 - 12:05: ЭКОНОМИКА И ФИНАНСЫ - Economy and Finances -> ПРОБЛЕМА КРИМИНАЛИЗАЦИИ ЭКОНОМИКИ - Карим_Хайдаров.
12.11.2019 - 11:53: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Бориса Сергеевича Миронова - Карим_Хайдаров.
12.11.2019 - 11:49: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Веры Лесиной - Карим_Хайдаров.
11.11.2019 - 00:24: СОВЕСТЬ - Conscience -> РУССКИЙ МИР - Карим_Хайдаров.
10.11.2019 - 23:14: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Кирилла Мямлина - Карим_Хайдаров.
08.11.2019 - 06:44: ВОЙНА, ПОЛИТИКА И НАУКА - War, Politics and Science -> Проблема государственного терроризма - Карим_Хайдаров.
08.11.2019 - 06:42: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Просвещение от Вячеслава Осиевского - Карим_Хайдаров.
05.11.2019 - 21:56: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> Декларация Академической Свободы - Карим_Хайдаров.
04.11.2019 - 12:41: ВОСПИТАНИЕ, ПРОСВЕЩЕНИЕ, ОБРАЗОВАНИЕ - Upbringing, Inlightening, Education -> КОМПЬЮТЕРНО-СЕТЕВАЯ БЕЗОПАСНОСТЬ ДЛЯ ВСЕХ - Карим_Хайдаров.
Bourabai Research Institution home page

Bourabai Research - Технологии XXI века Bourabai Research Institution