balambasik / throttler
限制任何操作
1.0.10
2022-01-21 21:06 UTC
Requires
- php: >=7.2.0
This package is not auto-updated.
Last update: 2024-09-28 10:12:54 UTC
README
Throttler - 简单的 PHP 库。
设计用来限制任何动作。最小配置,最大简洁。
与 MySql 驱动和内存驱动兼容。添加你的驱动,实现 DriverInterface。
安装
composer require balambasik/throttler
使用示例
$driver = new MySQLDriver("localhost", "root", "", "throttler", "throttler"); $factory = new ThrottlerFactory($driver); $registerThrottler = $factory ->id($_SERVER["REMOTE_ADDR"]) ->tag("/api/register") ->waitSeconds(5) ->create(); // 1 request per 5 seconds per IP, per route - "/api/register" if($registerThrottler->isLimit()){ exit("Limit!") } else { // handle request } // or ------------------------------------- $registerThrottler->isLimit(function(){ exit("Limit!") }); // handle request
多个实例
// 1 request per 5 seconds per IP, per route - "/api/register" $registerThrottler = $factory ->id($_SERVER["REMOTE_ADDR"]) ->tag("/api/register") ->waitSeconds(5) ->create(); // 1 request per 1 minute per IP, per route - "/api/forgot_password" $forgotThrottler = $factory ->id($_SERVER["REMOTE_ADDR"]) ->tag("/api/forgot_password") ->waitMinutes(1) ->create(); $registerThrottler->isLimit(function(){ exit("Limit!") }); $forgotThrottler->isLimit(function(){ exit("Limit!") });
手动模式
默认情况下,方法 isLimit() 记录访问并检查是否达到限制。您可以分离这些操作。
// 1 request per 5 seconds per IP, per route - "/api/register" $registerThrottler = $factory ->id($_SERVER["REMOTE_ADDR"]) ->tag("/api/register") ->waitSeconds(5) ->createManualMode(); // set hit $registerThrottler->hit(); // check limit $registerThrottler->isLimit(function(){ exit("Limit!") });
MySql 驱动需要一张表。
CREATE TABLE IF NOT EXISTS `table_name` ( `id` varchar(10), `tag` varchar(10), `wait` INT(11) UNSIGNED NOT NULL ); ALTER TABLE `table_name` ADD INDEX (`id`, `tag`);
或者一次调用 MySqlDriver 对象的 createTable() 方法
$MySQLDriver = new MySqlDriver("localhost", "login", "password", "dbName", "tableName"); $MySQLDriver->createTable();
内存驱动
InMemoryDriver 不需要任何配置。由于明显的原因,它无法在请求之间持久化状态。因此,使用它来保护路由是一个糟糕的主意。它非常适合限制单个请求内的操作。
$driver = new InMemoryDriver(); $factory = new ThrottlerFactory($driver); // ...
许可证 - MIT。