kolgaev / site-stats
网站统计信息
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;
只需通过 phpMyAdmin 或使用恢复命令将其导入 mysql 即可
mysql -u ИМЯ_ПОЛЬЗОВАТЕЛЯ -p НАИМЕНОВАНИЕ_БД < "config/database.sql"
数据库应已在服务器上存在
然后,要使用传入请求计数器,可以添加触发器,使用文件 /config/triggers.sql
在添加触发器之前,请确保存在具有 ip
列的 queue_requests
表
使用
使用包
要将统计信息作为包使用,只需在执行主代码之前定义代理,进行封锁检查
(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
的加载,并在主文件中在 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
错误。可以更改错误代码,例如将其更改为 400
、404
、418 I’m a teapot(“我是一把茶壶”)
等。
所有错误代码的列表可以在 百科全书 中查看。