3, 'reset' => time() - 1])); assertTrue( checkRateLimit($ip, 3, 60, $rlDir), 'rate limit : le compteur repart à zéro après expiration de la fenêtre' ); // --- Fail-open si le stockage est indisponible --------------------------------- // Un chemin qui est un fichier (pas un répertoire) : mkdir doit échouer $notADir = $rlDir . '/fichier-bloquant'; file_put_contents($notADir, 'x'); assertTrue( @checkRateLimit('198.51.100.5', 1, 60, $notADir), 'rate limit : fail-open si le répertoire de stockage est indisponible' ); // --- Nettoyage ----------------------------------------------------------------- foreach ([$rlDir, $rlDir . '/autre'] as $dir) { foreach (glob($dir . '/rl_*.json') ?: [] as $file) { unlink($file); } if (is_dir($dir)) { rmdir($dir); } } unlink($notADir);