Schet_USER_site_PHP_Счётчик_просмотров_страниц>

Статистика посещений сайта без сторонних сервисов

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

  • stat.php — инклудится в каждую страницу, за которой необходимо следить
  • stat.log — файл, в который будет записываться история посещений
  • seestats.php — файл, для просмотра статистики
 elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) < $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; >else < $ip=$_SERVER['REMOTE_ADDR']; >return $ip; > if (strstr($_SERVER['HTTP_USER_AGENT'], 'YandexBot')) //Выявляем поисковых ботов elseif (strstr($_SERVER['HTTP_USER_AGENT'], 'Googlebot')) else < $bot=$_SERVER['HTTP_USER_AGENT']; >$ip = getRealIpAddr(); $date = date("H:i:s d.m.Y"); // определяем дату и время события $home = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI']; // определяем страницу сайта $lines = file($file); while(count($lines) > $col_zap) array_shift($lines); $lines[] = $date."|".$bot."|".$ip."|".$home."|\r\n"; file_put_contents($file, $lines); ?> 

Что бы каждый раз вручную не копать файл stat.log, создадим файл для вывода статистики посещений сайта:
Файл seestats.php

 else < $col=50; >$file=file("stat.log"); ?>   td.zz  
sizeof($file)) < $col=sizeof($file); >echo "Последние ".$col." посещений сайта:"; ?> sizeof($file)-$col; $si--) < $string=explode("|",$file[$si]); $q1[$si]=$string[0]; // дата и время $q2[$si]=$string[1]; // имя бота $q3[$si]=$string[2]; // ip бота $q4[$si]=$string[3]; // адрес посещения echo ''; echo ''; echo ''; echo ''; > echo '
Время и дата Данные о посетителе IP/прокси Посещенный URL
'.$q1[$si].''.$q2[$si].''.$q3[$si].''.$q4[$si].'
'; echo '
Просмотреть последние 100 500'; echo '1000 посещений.'; echo '
Просмотреть все посещения.
'; echo ''; ?>

Вот и всё! Теперь даже при падении liveinternet или Яндекс.Метрики, Вы всегда сможете узнать, кто заходил к Вам на сайт!

Источник

Скрипт, отображающий количество посетителей
находящихся на сайте в данный момент

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

Предлагаем Вам установить на свой сайт простой PHP скрипт, позволяющий посчитать количество посетителей онлайн. Особенностью данного скрипта является то, что он не использует базу MySQL.

Для подсчета количества уникальных посетителей, находящихся на Вашем сайте в данный момент времени, Вам необходимо вставить в самое начало содержимого Вашей странички следующий PHP код:

session_start ();
//выделяем уникальный идентификатор сессии
$id = session_id ();

if ( $id != «» ) //текущее время
$CurrentTime = time ();
//через какое время сессии удаляются
$LastTime = time () — 600 ;
//файл, в котором храним идентификаторы и время
$base = «session.txt» ;

$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 ++;
>
>

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 ;
>

Читайте также:  Java spring bean datasource

if (! $is_sid_in_file ) $fp = fopen ( $base , «a-» );
$line = $id . «|» . $CurrentTime . «\n» ;
fputs ( $fp , $line );
fclose ( $fp );
>
>
?>

Принцип работы данного скрипта довольно прост.

У каждого посетителя есть свой идентификатор сессии session_id(). При заходе на сайт мы выделяем этот идентификатор и ищем его в нашей базе (в нашем случае это файл session.txt в корне сайта). Если такого идентификатора сессии нет, то помещаем его в наш текстовый файл, дополнительно записав текущее время через разделитель «|».

После обновления страницы пользователем мы вновь выделяем идентификатор сессии, проверяем его наличие в файле session.txt. Если такого идентификатор сессии нет, то добавляем, если есть — обновляем время (заменяем на текущее время).

Далее просматриваем все записи в файле session.txt и удаляем те, у которых разница с текущим временем составляет больше 10 минут (или 600 секунд). Данный интервал времени можно изменить на свое усмотрение, изменив значение в строке:

Для вывода в нужном месте информации о количестве посетителей, находящихся в данный момент на Вашем сайте, используйте следующий код:

Для нормальной работы данного скрипта необходимо чтобы Ваш хостинг поддерживал использование сессий!

Данный скрипт долгое время функционировал и на данном сайте, но в дальнейшем был переведен на работу с MySQL. Пример работы аналогичного скрипта Вы можете наблюдать в верхней части правой колонки нашего сайта над меню.

Источник

Счетчик онлайн посетителей на сайте

Счетчик онлайн посетителей на сайте

Сегодня мы реализуем на сайте счетчик онлайн посетителей. Для работа с базой данных мы используем библиотеку ReadBeanPHP. В этой статье можно ознакомиться с её основами. В нашем примере будут учитываться все гости сайта, в том числе и неавторизованные.

Первым делом создадим новую базу с именем “count” и типом utf8_general_ci. Теперь перейдем к теории.

Теория: каким образом считается онлайн?

Одна из самых грамотных техник, которая существует на данный момент, состоит в следующем:

  1. Создается таблица online c количеством столбцов = 3. Первый столбец это id (тип int, длина 11, индекс PRIMARY, A_I — автоинкремент), второй lastvisit (тип int, длина 11), третий ip (тип VARCHAR, длина 15, ). В поле lastvisit будет храниться дата посещения пользователя сайта в формате timestamp. Когда человек зайдет к нам на сайт, то мы сохраним дату его последнего визита и ip адрес. Из этой таблицы мы будем тянуть все данные, например, количество онлайн за последний час;
  2. Достается ip пользователя через суперглобальный массив SERVER;
  3. Проверяется: нет ли уже такой записи об этом пользователе, чтобы каждый раз её не дублировать;
  4. Если такой пользователь уже найден, то мы его обновляем, но это будет сильным ударом по производительности. Поэтому в скрипте используется технология — куки, которая позволит обновлять данные в базе через заданный интервал времени.
  5. Для работы с куки используется готовый класс CookieManager, в котором есть 4 метода. Метод store – сохраняет данные в куки. Stored – проверяет есть куки или нет. Read – возвращает данные. Delete – удаляет куки, если это требуется.

Практика: листринг скрипта

require 'cookies.php'; // подключаем класс CookieManager require 'rb.php'; // подключаем библиотеку ReadBeanPHP R::setup( 'mysql:host=127.0.0.1;dbname=count','root', '' ); // подключаемся к базе данных if ( !R::testconnection() ) < exit ('Нет соединения с базой данных'); >$cookie_key = 'online-cache'; // Достается ip пользователя через суперглобальный массив SERVER $ip = $_SERVER['REMOTE_ADDR']; // Проверяет нет ли уже такой записи об этом пользователе, чтобы каждый раз её не дублировать $online = R::findOne('online', 'ip = ?', array($ip)); if ( $online ) < $do_update = false; // Если такой пользователь уже найден, то мы его обновляем, // но это будет сильным ударом по производительности, поэтому использует куки if ( CookieManager::stored($cookie_key) ) < $c = (array) @json_decode(CookieManager::read($cookie_key), true); if ( $c ) < //обновляем данные в базе каждые 5 минут if( $c['lastvisit'] < (time() - (60 * 5)) ) < $do_update = true; >> else < $do_update = true; >> else < $do_update = true; >if ( $do_update ) < // Сохраним в куки дату последнего обновления // информации о посещении пользователя $time = time(); $online->lastvisit = $time; R::store($online); CookieManager::store($cookie_key, json_encode(array( 'id' => $online->id, 'lastvisit' => $time))); > > else< // Если пользователь не найден, то мы его добавим $time = time(); $online = R::dispense('online'); $online->lastvisit = $time; $online->ip = $ip; R::store($online); CookieManager::store($cookie_key, json_encode(array( 'id' => $online->id, 'lastvisit' => $time))); // json_encode мы делаем потому что в куки нельзя хранить структуры, // в отличии от сессии, а можно хранить только строки > // Выводим количество онлайн за последний час $online_count = R::count('online', "lastvisit > " . ( time() - (3600) )) // конец

Класс для работы с куки CookieManager

class CookieManager < public function __construct() < //empty one >static public function store($key, $value, $expire = false, $path = '/', $domain = 'current', $secure = 0) < if ($domain == 'current') < $domain = $_SERVER['HTTP_HOST']; >if (!$expire) < $expire = time() + (3600 * 24); >setcookie($key, $value, $expire, $path, $domain, $secure); return true; > static public function read($key) < if (isset($_COOKIE[$key])) < return $_COOKIE[$key]; >else < return false; >> static public function stored($key) < return isset($_COOKIE[$key]); >static public function delete($key, $value = '', $expire = 1, $path = '/', $domain = 'current', $secure = 0) < if ($domain == 'current') < $domain = $_SERVER['HTTP_HOST']; >setcookie($key,$value,$expire,$path,$domain,$secure); return true; > >

Скрипт на 100% рабочий и тестировался он на Open Server. Скачать его вместе с дампом базы можно по ссылке ниже

Урок был создан на основе видео:

Источник

Читайте также:  Php все элементы объекта

Простой счетчик просмотров страницы сайта на php

Счетчик просмотров на сайт

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

Телеграм-канал serblog.ru

 ?php $file = file("count.txt"); $count = implode("", $file); $count++; $myfile = fopen("count.txt","w"); fputs($myfile,$count); fclose($myfile); ?> span>Просмотров:  ?=$count ?>span> // вывод счетчика

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

Вместо слова «Просмотров» можно установить картинку в виде глаза. Это сейчас не только модно, но так же экономит место и смотрится достаточно информативно без каких-либо дополнительных объяснений.

Читайте также:

Здравствуйте Александр!
Нашла на Вашем сайте, то что давно искала, но я как говорят, чайник, и не понимаю как установить этот простой скрипт подсчета посетителей на свою страницу сайта.
Прошу Вашей помощи.
Готова оплатить вашу работу

Добрый день, Александр! 27-01-2021г. Ошибка вот такая: Unchecked runtime.lastError: The message port closed before a response was received ! Но считает так что прибавляет 3 каждый раз.

Скорее всего проблема в браузере и скорее всего у вас Хром. Попробуйте открыть страницу в другом браузере. Отпишитесь.

Привожу свой код с добавлениями, которые позволяют записывать в файл имя браузера и время входа на сайт «Простой счетчик просмотров страницы сайта на php»

1 2 3 4 5 6 7 8 9 10 11 12 13 14
Schet_USER_site_PHP_Счётчик_просмотров_страницы body{ font-family: sans-serif; } .con3tent{ width: 80%; margin: 0 auto; } p.views span{ position: relative; top: -4px; } //Счётчик просмотров страницы на PHP
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39
 html lang="ru"> head> meta charset="UTF-8″/> meta name="viewport" content="width=device-width, initial-scale=1.0″/> title>Schet_USER_site_PHP_Счётчик_просмотров_страниц>/title> style type="text/css"> body < font-family: sans-serif; >.con3tent < width: 80%; margin: 0 auto; >p.views span < position: relative; top: -4px; >/style> /head> body>  < ?php$file =@file(‘./tmp/counter.txt’); $count = @implode("", $file); $count++; $myFile = fopen(‘./tmp/counter.txt’, ‘w’); fputs($myFile, $count); fclose($myFile); $filename = ‘./tmp/example.log’; $ip = ($_SERVER["REMOTE_ADDR"]); // Определяем IP посетителя $bravo = ($_SERVER["HTTP_USER_AGENT"]);//Определяем браузер file_put_contents($filename, date([Y-m-d H:i:s]) . print_r($bravo, true) . PHP_EOL, FILE_APPEND | LOCK_EX); ?> div class="con3tent"> h1>Счётчик просмотров страниц> на PHP/h1> p class="views">img src="./tmp/eye.svg" width="20″ alt="просмотров"/> span>< ?= $count ?>/span> /p> /div> /body> /html>

< !DOCTYPE html> body < font-family: sans-serif; >.con3tent < width: 80%; margin: 0 auto; >p.views span < ?php $file =@file(‘./tmp/counter.txt’); $count = @implode("", $file); $count++; $myFile = fopen(‘./tmp/counter.txt’, ‘w’); fputs($myFile, $count); fclose($myFile); $filename = ‘./tmp/example.log’; $ip = ($_SERVER["REMOTE_ADDR"]); // Определяем IP посетителя $bravo = ($_SERVER["HTTP_USER_AGENT"]);//Определяем браузер file_put_contents($filename, date(‘[Y-m-d H:i:s] ‘) . print_r($bravo, true) . PHP_EOL, FILE_APPEND | LOCK_EX); ?>

Счётчик просмотров страниц> на PHP

Добрый день, Александр!
Немного доработал Вашу программу и в другой файл вывожу название браузера и время входа на страницу сайта «Простой счетчик просмотров страницы сайта на php»
Запускал сайт на разных брайзерах. Вот результат. [2021-01-28 10:02:57] Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko 1 3 5 7 =8 (содержимое counter.txt после подсчёта =8)
[2021-01-28 10:02:57] Mozilla/5.0 (Windows NT 10.0; Win64; x64; Trident/7.0; rv:11.0) like Gecko Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/51.0.2704.79 Safari/537.36 Edge/14.14393 1 2 3 4 5 =5 (содержимое counter.txt после подсчёта =5) [2021-01-28 10:24:21] Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:78.0) Gecko/20100101 Firefox/78.0 =1 2 3 4 5 6 =6 (содержимое counter.txt после подсчёта =6) [2021-01-28 10:31:22] Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.141 Safari/537.36 = 1 4 7 10 =12 (содержимое counter.txt после подсчёта =12) [2021-01-28 10:37:23] Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/87.0.4280.88 YaBrowser/20.12.1.179 Yowser/2.5 Safari/537.36 1 3 5 7 9 11 =12 (содержимое counter.txt после подсчёта =12)

Источник

Оцените статью