kolgaev/site-stats

网站统计信息

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

This package is auto-updated.

Last update: 2024-09-21 17:09:11 UTC


README

管理网站访问统计

此包使用来自 illuminatesymfony 的外部依赖。在较老版本的 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;

只需通过 phpMyAdmin 或使用恢复命令将其导入 mysql 即可

mysql -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p НАИМЕНОВАНИЕ_БД < "config/database.sql"

数据库应已在服务器上存在

然后,要使用传入请求计数器,可以添加触发器,使用文件 /config/triggers.sql

在添加触发器之前,请确保存在具有 ip 列的 queue_requests

使用

使用包

要将统计信息作为包使用,只需在执行主代码之前定义代理,进行封锁检查

(new \Kolgaev\IpInfo\Ip())->check();

方法 check() 将返回一个包含键 block 的数组,该键确定 IP 地址是否被封锁,并接受 truefalsenull(在检查错误的情况下)的值

示例数组

[
    "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 的加载,并在主文件中在 autoload.php 之后加载 .site-stats.php

index.php

<?php

require __DIR__ . "/vendor/autoload.php";

require __DIR__ . "/.site-stats.php";

//...

关于自动加载的详细信息

作为独立项目使用

安装独立项目时,还需要在网站的 index.php 中连接可执行文件

<?php

require __DIR__ . "/<ИМЯ_КАТАЛОГА>/public/index.php";

//...

如果您通过单独的 php 文件定义环境变量 env,则必须在创建它的基础上,在文件 /<目录名>/config/env.php 中进行

总结

现在,在发生阻塞的情况下,代码的执行将被停止,并在页面上显示 500 错误。可以更改错误代码,例如将其更改为 400404418 I’m a teapot(“我是一把茶壶”) 等。

所有错误代码的列表可以在 百科全书 中查看。