<?php
class FormPerformance {
private $formName;
private $requestCount = 0;
private $lastRequestTime = 0;
private $rateLimit = 10; // Requests per minute
private $lockFile = 'form_lock.lock'; // File to prevent race conditions
public function __construct($formName, $rateLimit = 10) {
$this->formName = $formName;
$this->rateLimit = $rateLimit;
}
public function isAllowed() {
//Check if rate limit is exceeded
if (file_exists($this->lockFile)) {
return false; //Rate limit exceeded
}
$currentTime = time();
$timeDelta = $currentTime - $this->lastRequestTime;
if ($timeDelta > 60) {
$this->requestCount = 0;
}
if ($this->requestCount >= $this->rateLimit) {
return false; //Rate limit exceeded
}
$this->requestCount++;
$this->lastRequestTime = $currentTime;
return true; //Request allowed
}
public function incrementRequestCount() {
file_put_contents($this->lockFile, time()); //Prevent race conditions
$this->requestCount++;
file_put_contents($this->lockFile, time()); //Prevent race conditions
}
public function resetRequestCount() {
unlink($this->lockFile);
$this->requestCount = 0;
}
}
//Example usage:
/*
$form = new FormPerformance('contact_form', 5); //Rate limit to 5 requests per minute
if ($form->isAllowed()) {
//Process the form data
echo "Form submitted successfully!";
$form->incrementRequestCount();
} else {
echo "Rate limit exceeded. Please try again later.";
$form->resetRequestCount();
}
*/
?>
Add your comment