kolgaev/site-stats

Statistic info for site

v0.1.7 2022-03-21 11:04 UTC

This package is auto-updated.

Last update: 2024-04-21 16:15:43 UTC


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 («я — чайник») и тд

Список всех кодов можно взглянуть в энциклопедии