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

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

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

Предлагаем Вам установить на свой сайт простой 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 ;
>

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. Пример работы аналогичного скрипта Вы можете наблюдать в верхней части правой колонки нашего сайта над меню.

Источник

Простой счетчик просмотров страницы сайта на 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)

Источник

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

Доброго времени суток! Я думаю, все ещё помнят, как недавно после небольших сбоев на серверах 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 или Яндекс.Метрики, Вы всегда сможете узнать, кто заходил к Вам на сайт!

Источник

Счетчик просмотров страниц с графиком

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

Структура БД

Для хранения просмотров нужно создать таблицу `visits` в БД:

CREATE TABLE IF NOT EXISTS `visits` ( `id` int(11) NOT NULL AUTO_INCREMENT, `page_id` int(11) UNSIGNED NOT NULL DEFAULT '0', `counter` int(11) UNSIGNED NOT NULL, `date` date NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM AUTO_INCREMENT=1 DEFAULT CHARSET=utf8;
  • page_id – ID страницы,
  • counter – количество просмотров,
  • date – дата в формате YYYY-MM-DD .

Просмотры будут хранится в виде счетчика за день, таким образом получится сэкономить на количестве записей в таблице и ускорить последующие SQL-запросы к ней.

Скрипт счетчика

В обработчике вывода статей нужно добавить код для добавления данных в созданную таблицу.

// ID статьи $post_id = 123; // Подключение к БД (далее в примерах его не будет). $dbh = new PDO('mysql:dbname=db_name;host=localhost', 'логин', 'пароль'); $sth = $dbh->prepare("SELECT * FROM `visits` WHERE `page_id` = ? AND `date` = CURDATE()"); $sth->execute(array($post_id)); $res = $sth->fetch(PDO::FETCH_ASSOC); if (empty($res)) < $sth = $dbh->prepare("INSERT INTO `visits` SET `page_id` = ?, `counter` = 1, `date` = CURDATE()"); $sth->execute(array($post_id)); > else < $sth = $dbh->prepare("UPDATE `visits` SET `counter` = `counter` + 1 WHERE `id` = ?"); $sth->execute(array($res['id'])); >

Если один пользователь обновит страницу несколько раз, то все просмотры будут зачтены. Избежать этого можно добавив проверку – дополнительно хранить user agent последнего пользователя в отдельном поле БД и при обновлении проверять его.

Также можно исключить просмотры поисковиков и других ботов с помощью функции is_bot().

Теперь просмотры добавляются в БД:

Заполненная таблица с просмотрами

Вывод результатов

Просмотры за день

$post_id = 123; $sth = $dbh->prepare("SELECT `counter` AS `views` FROM `visits` WHERE `post_id` = ? AND `date` = CURDATE()"); $sth->execute(array($post_id)); $res = $sth->fetch(PDO::FETCH_ASSOC); echo $res['views'];

Неделя, месяц, год

$post_id = 123; $date = date('Y-m-d', strtotime('-7 days')); // -1 month, -1 year $sth = $dbh->prepare("SELECT SUM(`counter`) AS `views` FROM `visits` WHERE `item_id` = ? AND `date` > ?"); $sth->execute(array($post_id, $date)); $res = $sth->fetch(PDO::FETCH_ASSOC); echo $res['views'];

Интервал между датами

$post_id = 123; $date_start = date('Y-m-d', strtotime('01.09.2019')); $date_end = date('Y-m-d', strtotime('01.10.2019')); $sth = $dbh->prepare("SELECT SUM(`counter`) AS `views` FROM `visits` WHERE `item_id` = :id AND `date` BETWEEN :start AND :end"); $sth->execute(array('id' => $post_id, 'start' => $date_start, 'end' => $date_end)); $res = $sth->fetch(PDO::FETCH_ASSOC); echo $res['views'];

За всё время

$post_id = 123; $sth = $dbh->prepare("SELECT SUM(`counter`) AS `views` FROM `visits` WHERE `post_id` = :id"); $sth->execute(array('id' => $post_id)); $res = $sth->fetch(PDO::FETCH_ASSOC); echo $res['views'];

График просмотров

Сформируем график просмотров статьи с помощью плагина диаграмм morris.js. В PHP получим данные, сформируем массив по дням и выведем объектом в JS.

prepare("SELECT * FROM `visits` WHERE `post_id` = ? ORDER BY `date`"); $sth->execute(array($post_id)); $res = $sth->fetchAll(PDO::FETCH_ASSOC); $list = array(); foreach ($res as $row) < $list[] = array('year' =>date('d.m.Y', strtotime($row['date'])), 'value' => $row['counter']); > ?>     

Источник

Читайте также:  Php pdo insert batch
Оцените статью