kolgaev / site-stats
Statistic info for site
Requires
- php: ^7.3|^8.0
- illuminate/collections: ^8.0
- illuminate/database: ^8.0
- illuminate/events: ^8.0
- symfony/deprecation-contracts: ^2.5
- symfony/string: ^5.4
- symfony/translation: ^5.4
- symfony/translation-contracts: ^2.5
README
Ведение статистики посещения сайта
Данный пакет использует сторонние зависимости от illuminate
и symfony
. На некоторых серверах с более старой версией php может возникнуть проблема с установкой данного пакета. Чтобы продолжить вести статистику и учет блокированных адресов, воспользуйтесь упрощенной версией пакета site-stats-litle.
Установка
Имеется два варианта установки
Установка пакета
Данный вариант предназначен для использования статистики на сайте в виде пакета.
Если Вы уже используете в своём проекте менеджер пакетов composer
то необходимо выполнить установку пакета статистики
composer require kolgaev/site-stats
Если в проекте не используется composer
перед установкой пакета необходимо инициализировать конфигурационный файл composer.json
composer init
Установка отдельным проектом
Данный вариант подходит больше для использования на самодельных движках и, скорее всего, на движках MODIX и тд
Для установки как отдельный проект выполнить команду в том же каталоге, где расположен основной index.php
composer create-project kolgaev/site-stats <ИМЯ_КАТАЛОГА>
<ИМЯ_КАТАЛОГА> заменить на своё, главное чтобы этой папки не существовало
Определение переменных окружения
После необходимо определить переменные в env
окружении для подключения к базе данных
Если в Вашем проекте имеется файл .env
или ему подобный, то достаточно добавить в него следующие переменные:
DB_HOST
- Адрес сервера базы данныхDB_NAME
- Наименование базы данныхDB_USER
- Имя пользователя базы данныхDB_PASS
- Пароль доступа к базе данныхKOLGAEV_STATS_DEBUG
- Вывод JSON строки при использовании статистики как проект
Если в Вашем проекте не используется загрузка env окружения, то можно определить переменные в php
Например, создать отдельный файл с кофигурацией env.php
<?php putenv("DB_HOST=localhost"); putenv("DB_NAME=block_info"); putenv("DB_USER=root"); putenv("DB_PASS=pass");
и передать путь до этого файла конструктору класса
new \Kolgaev\IpInfo\Ip(__DIR__ . "/env.php");
Если Вы используете apache
, то переменные можно определить в файле .htaccess
SetEnv DB_HOST localhost SetEnv DB_NAME block_info SetEnv DB_USER root SetEnv DB_PASS pass
Создание базы данных
Структура базы данных определена в файле /config/database.sql
Перед установкой копии базы данных, необходимо убедиться, что пользователь Ваш имеет привелегии для создания функций, если это не так, то выполните следующий запрос
mysql> SET GLOBAL log_bin_trust_function_creators = 1;
Достаточно импортировать его в mysql через phpMyAdmin или использовать команду восстановления
mysql -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p НАИМЕНОВАНИЕ_БД < "config/database.sql"
База данных уже должна существовать на сервере
Затем, для использования счетчика входящих заявок, можно добавить триггер, используя файл /config/triggers.sql
Перед добавлением триггера необходимо убедиться в наличии таблицы queue_requests
с колонкой ip
Использование
Использование пакета
Для использования статистики в виде пакета достаточно определить посредник перед выполнением основного кода, сделать проверку блокировки
(new \Kolgaev\IpInfo\Ip())->check();
Метод check()
вернет массив, в котором будет присутствовать ключ block
определяющий факт блокировки ip-адреса и будет принимать значения true
, false
или null
(в случае ошибки проверки)
Пример массива
[ "block" => <null|boolean>, // Флаг блокировки "block_auto" => <null|boolean>, // Флаг автоматической блокировки "block_host" => <null|boolean>, // Флаг блокировки по имени хоста "block_period" => <null|boolean>, // Флаг блокировки по диапазону адресов "block_ip" => <null|boolean>, // Флаг блокировки по прямому соответствию адреса "requests" => <int>, // Количество оставленных заявок "visits" => <int>, // Количество посещений до блокировки "visits_all" => <int>, // Общее количество посещений "visits_drops" => <int>, // Количетсво блокированных посещений "ip" => <null|string>, // IP адрес клиента ];
Либо создать отдельный файл, например .site-stats.php
<?php require __DIR__ . "/vendor/autoload.php"; try { $ip = (new \Kolgaev\IpInfo\Ip())->check(); if (!empty($ip['block'])) { if ($ip['block'] == true) { http_response_code(500); exit; } } } catch (\Exception $e) { // }
Который необходимо подключить в index.php
в самом начале
require __DIR__ . "/.site-stats.php";
Если Ваш сайт уже использует зависимости и ранее у Вас уже подключен /vendor/autoload.php
, то в файле .site-stats.php
нужно исключить подгрузку autoload.php
и в главном файле подгружать .site-stats.php
после autoload.php
index.php
<?php require __DIR__ . "/vendor/autoload.php"; require __DIR__ . "/.site-stats.php"; //...
Использование как отдельного проекта
При установке отдельного проекта, также необходимо подключить исполняемый файл в основной index.php
сайта
<?php require __DIR__ . "/<ИМЯ_КАТАЛОГА>/public/index.php"; //...
Если Вы опредяляете переменные окружения env
через отдельный файл php
, то делать это необходимо в файле /<ИМЯ_КАТАЛОГА>/config/env.php
, предварительно создав его
Итог
Теперь в случае блокировки, дальнейшее выполнение кода будет остановлено и на странице отобразится 500
ошибка.
Код ошибки можно менять, например на 400
, 404
, 418 I’m a teapot («я — чайник»)
и тд
Список всех кодов можно взглянуть в энциклопедии