denosyscore / rate-limiter
Rate limiting services and middleware
v0.22.0
2026-11-13 14:02 UTC
Requires
- php: ^8.2
- denosyscore/cache: ^0.22
- denosyscore/http: ^0.22
- psr/http-message: ^2.0
- psr/http-server-handler: ^1.0
- psr/http-server-middleware: ^1.0
Requires (Dev)
- phpstan/phpstan: ^2.1
- phpunit/phpunit: ^11.5
Suggests
None
Provides
None
Conflicts
None
Replaces
None
README
Read-only split. This package is developed in denosyscore/framework under
packages/rate-limiter. Open issues and pull requests there.
Rate limiting services and middleware
Installation
composer require denosyscore/rate-limiter
Quick start
Count attempts per key over a time window, stored in any DenoSys cache.
<?php require __DIR__ . '/vendor/autoload.php'; use Denosys\Cache\FileCache; use Denosys\RateLimiter\RateLimiter; $limiter = new RateLimiter(new FileCache(sys_get_temp_dir() . '/my-app-limits')); $key = 'login:203.0.113.7'; for ($attempt = 1; $attempt <= 6; $attempt++) { if ($limiter->tooManyAttempts($key, maxAttempts: 5)) { echo "Locked out; try again in {$limiter->availableIn($key)}s\n"; break; } $limiter->hit($key, decaySeconds: 60); echo "Attempt {$attempt}, {$limiter->remaining($key, 5)} left\n"; } $limiter->clear($key);
Included Modules
- src/RateLimiter/*
Development
composer validate --strict find src -type f -name '*.php' -print0 | xargs -0 -n1 php -l