So begrenzen Sie die Anzahl der Benutzeranforderungen innerhalb einer Minute
Ein Benutzer fordert eine Datei nach Nummer über eine URL wie @ ascript.php?userid=222
. In diesem Beispiel wird der Datensatz der Datei # 222 angezeigt.
Now Ich möchte die Anzahl der Dateien pro (Remote-IP-) Benutzer auf maximal 5 verschiedene Datensätze pro Minute beschränken. Der Benutzer sollte jedoch beliebig oft auf denselben ID-Datensatz zugreifen können.
So kann der Benutzer beliebig oft auf die Datei # 222 zugreifen. Wenn der (Remote-IP-) Benutzer jedoch innerhalb einer Minute auf mehr als 5 andere Datensätze zugreift, sollte ein Fehler angezeigt werden.
Nehmen wir zum Beispiel an, dass innerhalb einer Minute die folgenden Anforderungen gestellt werden:
script.php?userid=222
script.php?userid=523
script.php?userid=665
script.php?userid=852
script.php?userid=132
script.php?userid=002
Bei der letzten Anforderung sollte die Fehlermeldung angezeigt werden.
Hier ist der Basiscode:
$id = $_GET['userid'];
if (!isset($_GET['userid']) || empty($_GET['userid'])) {
echo "Please enter the userid";
die();
}
if (file_exists($userid.".txt") &&
(filemtime($userid.".txt") > (time() - 3600 * $ttime ))) {
$ffile = file_get_contents($userid.".txt");} else {
$dcurl = curl_init();
$ffile = fopen($userid.".txt", "w+");
curl_setopt($dcurl, CURLOPT_URL,"http://remoteserver.com/data/$userid");
curl_setopt($dcurl, CURLOPT_RETURNTRANSFER, TRUE);
curl_setopt($dcurl, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_0);
curl_setopt($dcurl, CURLOPT_TIMEOUT, 50);
curl_setopt($dcurl, CURLOPT_FILE, $ffile);
$ffile = curl_exec($dcurl);
if(curl_errno($dcurl)) // check for execution errors
{
echo 'Script error: ' . curl_error($dcurl);
exit;
}
curl_close($dcurl);
$ffile = file_get_contents($userid.".txt");
}