palepurple / rate-limit
PHP rate limiting library with Token Bucket Algorithm, originally touhonoob/rate-limit
Installs: 435 743
Dependents: 1
Suggesters: 0
Security: 0
Stars: 13
Watchers: 2
Forks: 28
Open Issues: 1
Requires
- php: >= 8.0
Requires (Dev)
- cache/array-adapter: ^1.2
- php-coveralls/php-coveralls: ^2.2
- php-parallel-lint/php-parallel-lint: ^1.0
- phpstan/phpstan: *
- phpunit/phpunit: ^8|^9
- predis/predis: ^1.1|2.0
- psalm/phar: ^5.0
- psr/cache: ^1.0|^2.0
- slevomat/coding-standard: ^8.15
- tedivm/stash: ^0.16|^1.0
Suggests
- ext-apc: ^4.0
- ext-apcu: ^4.0
- ext-redis: ^2.2
- predis/predis: ^1.1
- symfony/cache: ^6.0
- tedivm/stash: ^0.15|^1.0
README
PHP Rate Limiting Library With Token Bucket Algorithm with minimal external dependencies.
Installation
composer require palepurple/rate-limit
Storage Adapters
The RateLimiter needs to know where to get/set data.
Depending on which adapter you install, you may need to install additional libraries (predis/predis or tedivm/stash) or PHP extensions (e.g. Redis, Memcache, APC)
- APCu
- Redis or Predis
- Stash (This supports many drivers - see http://www.stashphp.com/Drivers.html )
- Memcached
Example
require 'vendor/autoload.php'; use \PalePurple\RateLimit\RateLimit; use \PalePurple\RateLimit\Adapter\APC as APCAdapter; use \PalePurple\RateLimit\Adapter\Redis as RedisAdapter; use \PalePurple\RateLimit\Adapter\Predis as PredisAdapter; use \PalePurple\RateLimit\Adapter\Memcached as MemcachedAdapter; use \PalePurple\RateLimit\Adapter\Stash as StashAdapter; $adapter = new APCAdapter(); // Use APC as Storage // Alternatives: // // $adapter = new RedisAdapter((new \Redis()->connect('localhost'))); // Use Redis as Storage // // $adapter = new PredisAdapter(new \Predis\Predis(['tcp://127.0.0.1:6379'])); // Use Predis as Storage // // $memcache = new \Memcached(); // $memcache->addServer('localhost', 11211); // $adapter = new MemcacheAdapter($memcache); // // $stash = new \Stash\Pool(new \Stash\Driver\FileSystem()); // $adapter = new StashAdapter($stash); $rateLimit = new RateLimit("myratelimit", 100, 3600, $adapter); // 100 Requests / Hour $id = $_SERVER['REMOTE_ADDR']; // Use client IP as identity if ($rateLimit->check($id)) { echo "passed"; } else { echo "rate limit exceeded"; }
Installing via Composer
curl -sS https://getcomposer.org/installer | php
composer.phar require palepurple/rate-limit