Свежие комментарии

    Архивы за Январь, 2018

    Сколько посетители на сайте — PHP скрипт

    Сколько посетители на сайте - PHP скрипт

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

    Логика скрипта:

    1. Посетитель входит на сайт, если он новый то создается txt файл с его данными. Если же он недавний посетитель, то обновляем только последнею дату модификации его файла.

    2. Скрипт получает данные с полным путем всех текстовых файлов в массив. Проверяем когда были сделаны последние модификации в текстовом файле.

    3. Если сума последней модификации в текстовом файле( в unix секундах ) + указанный нами срок актуальности файла в секундах, является меньше текущего времени в секундах значит пользователь покинул сайт или не обновил страницу в браузере.

    Плюсы скрипта:

    — Компактная функция с ясно прокомментированным кодом и логично названными переменными.

    — Два вида счета посетителей: 1 — Учитывать только IP. 2 — Учитывать IP и браузер

    — Независим от базы данных

    — Не требует никаких конфигурации со стороны PHP, требует только права 777 на папку с файлами.

    Минусы скрипта:

    — Может возникнуть ошибка Permission denied если папка с текстовыми файлами не имеет права 777. Но, это скорее ошибка со стороны пользователя а не скрипта.

    — Он не показывает текущие кол-во людей на сайте, он показывает сколько посетителей зашли на сайт за указанный вами интервал времени.

    — Любой скрипт можно написать бы лучше, сколько программистов столько и стилей программирования.

    Посмотрим код нашей функции

    Не забудьте дать папки online_count права 777

    <?php
    function onlineCount() {
    	// Срок актуальности файла посетителя (в секундах)
    	$RelevanceOfTheFile = 60;
    	
    	// Путь до папки где лежат файлы посетителей
    	$VisistersFileDir = $_SERVER['DOCUMENT_ROOT'].'/online_count/';
    	
    	// Учитывать в названии файла и браузер 1 - да, 0 - нет
    	$AddBrowserAtFileName = 0;
    	
    	// Сохраняем новый файл постетителя
    	$VisiterFileName = $_SERVER['REMOTE_ADDR'];
    	if($AddBrowserAtFileName) { $VisiterFileName .= $_SERVER['HTTP_USER_AGENT']; }
    	$VisiterFileName = $VisistersFileDir.md5($VisiterFileName).'.txt';
    	$OpenFile = fopen($VisiterFileName, "a+");
    	
    	// Полный путь до всех файлов формата txt
    	$VisitersFiles = glob($VisistersFileDir.'*.txt');
    	
    	// Проверяем кол-во посетителей за последние $RelevanceOfTheFile секунд
    	if(!count($VisitersFiles)) {
    		return 0;
    	}
    	 else {
    	 	$ActiveVisiters = 0;
    	 	foreach($VisitersFiles as $File) {
    			$AgeFile = filemtime($File);
    			if( ($AgeFile + $RelevanceOfTheFile) >= time() ) {
    				$ActiveVisiters += 1;
    				$UpdateTheDateOfLastEdit = fopen($File, 'a+');
    				@fclose($UpdateTheDateOfLastEdit);
    			}
    			 else {
    			 	@fclose($OpenFile);
    			 	$DeleteOldFile = unlink($File);
    			 }
    		}
    		return $ActiveVisiters;
    	 }
    }
    $OnlineCount = onlineCount();
    echo "Посетителей на сайт за последнюю минуту: ".$OnlineCount;
    ?>

    Результат работы скрипта:

    Посетителей на сайт за последнюю минуту: 1

    Скачать архив с примером

    Все вопросы пишем в комментариях.