PHP code example of sanmai / sliding-window-counter
1. Go to this page and download the library: Download sanmai/sliding-window-counter library. Choose the download type require.
2. Extract the ZIP file and open the index.php.
3. Add this code to the index.php.
<?php
require_once('vendor/autoload.php');
/* Start to develop here. Best regards https://php-download.com/ */
sanmai / sliding-window-counter example snippets
// Import necessary classes
use SlidingWindowCounter\SlidingWindowCounter;
use SlidingWindowCounter\Cache\MemcachedAdapter;
// Create a counter that tracks hourly data for the past 24 hours
$counter = new SlidingWindowCounter(
'visitor-counter', // Name for your counter
3600, // Window size: 3600 seconds (1 hour)
3600 * 24, // Keep data for 24 hours
new MemcachedAdapter($memcached)
);
// Count a visit from this IP address
$counter->increment($_SERVER['REMOTE_ADDR']);
// You can also count by other keys
$counter->increment('user_' . $user_id);
$counter->increment('product_' . $product_id);
// Import the result class to access constants
use SlidingWindowCounter\AnomalyDetectionResult;
// Check if current activity is abnormal
$result = $counter->detectAnomaly($_SERVER['REMOTE_ADDR']);
if ($result->isAnomaly()) {
// Something unusual is happening!
$direction = $result->getDirection(); // Returns DIRECTION_UP, DIRECTION_DOWN, or DIRECTION_NONE
if ($direction === \SlidingWindowCounter\AnomalyDetectionResult::DIRECTION_UP) {
// Unusually high activity
echo "Spike detected! Current: " . $result->getLatest();
echo "Normal range: " . $result->getLow() . " to " . $result->getHigh();
}
}
// Get all stats as an array (values rounded to 2 decimal places by default)
$stats = $result->toArray();
// Or access individual values
$mean = $result->getMean();
$stdDev = $result->getStandardDeviation();
$currentValue = $result->getLatest();
// You can also get historical variance directly
$variance = $counter->getHistoricVariance($_SERVER['REMOTE_ADDR']);
$sampleCount = $variance->getCount();
// Higher sensitivity (1 standard deviation) - detects more anomalies
$result = $counter->detectAnomaly($_SERVER['REMOTE_ADDR'], 1);
// Default sensitivity (2 standard deviations)
$result = $counter->detectAnomaly($_SERVER['REMOTE_ADDR']);
// Lower sensitivity (3 standard deviations) - only extreme outliers
$result = $counter->detectAnomaly($_SERVER['REMOTE_ADDR'], 3);
// Extremely low sensitivity (5 standard deviations) - only detects extreme outliers
$result = $counter->detectAnomaly($_SERVER['REMOTE_ADDR'], 5);
// For regular Memcached
use SlidingWindowCounter\Cache\MemcachedAdapter;
$adapter = new MemcachedAdapter($memcached);
// For WordPress sites (uses WP's object cache)
use SlidingWindowCounter\Cache\WPCacheAdapter;
$adapter = new WPCacheAdapter($wp_object_cache);
use SlidingWindowCounter\Cache\CounterCache;
class RedisAdapter implements CounterCache
{
private $redis;
public function __construct(Redis $redis)
{
$this->redis = $redis;
}
public function increment(string $cache_name, string $cache_key, int $ttl, int $step)
{
$key = "{$cache_name}:{$cache_key}";
$this->redis->setnx($key, 0); // Create if not exists
$this->redis->expire($key, $ttl);
return $this->redis->incrby($key, $step);
}
public function get(string $cache_name, string $cache_key): ?int
{
$value = $this->redis->get("{$cache_name}:{$cache_key}");
return is_numeric($value) ? (int)$value : null;
}
}
Loading please wait ...
Before you can download the PHP files, the dependencies should be resolved. This can take some minutes. Please be patient.