1. <?php
  2. class FormPerformance {
  3. private $formName;
  4. private $requestCount = 0;
  5. private $lastRequestTime = 0;
  6. private $rateLimit = 10; // Requests per minute
  7. private $lockFile = 'form_lock.lock'; // File to prevent race conditions
  8. public function __construct($formName, $rateLimit = 10) {
  9. $this->formName = $formName;
  10. $this->rateLimit = $rateLimit;
  11. }
  12. public function isAllowed() {
  13. //Check if rate limit is exceeded
  14. if (file_exists($this->lockFile)) {
  15. return false; //Rate limit exceeded
  16. }
  17. $currentTime = time();
  18. $timeDelta = $currentTime - $this->lastRequestTime;
  19. if ($timeDelta > 60) {
  20. $this->requestCount = 0;
  21. }
  22. if ($this->requestCount >= $this->rateLimit) {
  23. return false; //Rate limit exceeded
  24. }
  25. $this->requestCount++;
  26. $this->lastRequestTime = $currentTime;
  27. return true; //Request allowed
  28. }
  29. public function incrementRequestCount() {
  30. file_put_contents($this->lockFile, time()); //Prevent race conditions
  31. $this->requestCount++;
  32. file_put_contents($this->lockFile, time()); //Prevent race conditions
  33. }
  34. public function resetRequestCount() {
  35. unlink($this->lockFile);
  36. $this->requestCount = 0;
  37. }
  38. }
  39. //Example usage:
  40. /*
  41. $form = new FormPerformance('contact_form', 5); //Rate limit to 5 requests per minute
  42. if ($form->isAllowed()) {
  43. //Process the form data
  44. echo "Form submitted successfully!";
  45. $form->incrementRequestCount();
  46. } else {
  47. echo "Rate limit exceeded. Please try again later.";
  48. $form->resetRequestCount();
  49. }
  50. */
  51. ?>

Add your comment