- Как создать счётчик посещаемости сайта на PHP без использования базы данных
- Счетчик посещаемости сайта на PHP без использования БД
- Важное примечание
- Вас может заинтересовать
- Счетчик просмотров страниц с графиком
- Структура БД
- Скрипт счетчика
- Вывод результатов
- Просмотры за день
- Неделя, месяц, год
- Интервал между датами
- За всё время
- График просмотров
- Простой счетчик просмотров страницы сайта на php
- Читайте также:
- Статистика посещений сайта без сторонних сервисов
Как создать счётчик посещаемости сайта на PHP без использования базы данных
Рассмотрим пример того, как создать свой собственный счётчик посещаемости для сайта на PHP без использования базы данных. Наш счётчик будет отображать статистику только за один день. То есть каждый день он будет обнуляться и начинать отсчёт заново.
Счетчик посещаемости сайта на PHP без использования БД
Счётчик отображает статистику только за текущий день
$ip_array = file("ip_list.txt"); // получаем массив из IP посетителей $used_ip = array_search($ip,$ip_array); // ищем в нём текущий IP if($used_ip == false) < // если он не находится $myfile = fopen("ip_list.txt","a"); fwrite($myfile,"\r\n".$ip); // то добавляем fclose($myfile); $ip_array = file("ip_list.txt"); // получаем массив из IP посетителей >$myusers = sizeof($ip_array)-1; // получаем количество посетителей $count++; // увеличиваем счёт посещений на один $myfile = fopen("mycount.txt","w"); fwrite($myfile,$count."\r\n".$myday); // записываем обновлённую информацию fclose($myfile); echo "Сегодня ".$count." посещений и ".$myusers." посетителей"; // выводим ?>
Важное примечание
Лучше всё-таки делать счётчик посещаемости с использованием базы данных (БД).
Ведь если к файлу будет осуществлено несколько одновременных обращений на запись/чтение, то он выполнит только какое-нибудь одно из них. А это приведёт к искажению результата.
Вас может заинтересовать
Счетчик просмотров страниц с графиком
Для примера возьмем статейный сайт, на нём нужно сделать счетчик просмотров статей, с выводом результатов за день, неделю, месяц и построить график посещаемости.
Структура БД
Для хранения просмотров нужно создать таблицу `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
Всем привет. Существует масса способов реализации счетчика просмотров страницы на PHP и в основном они работают с базой данных. Но если вам нужно прикрутить по-быстрому к одной странице счетчик посещений, то этот скрипт будет вам полезен. БД он не использует, а создает текстовый файл, в котором и хранит информацию о количестве просмотров. И, как обычно, предлагаю посмотреть как это выглядит:
?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»
Запускал сайт на разных брайзерах. Вот результат. [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." посещений сайта:"; ?> Время и дата Данные о посетителе IP/прокси Посещенный URL 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 ''.$q1[$si].' '; echo ''.$q2[$si].' '; echo ''.$q3[$si].' '; echo ''.$q4[$si].' '; > echo '
'; echo '
Просмотреть последние 100 500'; echo '1000 посещений.'; echo '
Просмотреть все посещения. '; echo ''; ?>
Вот и всё! Теперь даже при падении liveinternet или Яндекс.Метрики, Вы всегда сможете узнать, кто заходил к Вам на сайт!