exists($dataname)) { $json = $redis->get($dataname); $data = json_decode($json, true) ?? []; } $current_time = time(); if (isset($data[$ip]) && $current_time - $data[$ip]['last_access_time'] >= $period) { $data[$ip]['count'] = 0; $data[$ip]['last_access_time'] = $current_time; } if (isset($data[$ip]) && $data[$ip]['count'] >= $limit) { http_response_code(429); header('Retry-After: ' . $period - ($current_time - $data[$ip]['last_access_time'])); header(HEADER_APPLICATION_JSON); exit(json_encode([ "success" => false, "error" => "You have been rate limited. Retry in " . $period - ($current_time - $data[$ip]['last_access_time']) . " seconds(s)" ])); } if (!isset($data[$ip])) { $data[$ip] = array('count' => 0, 'last_access_time' => 0); } $data[$ip]['count']++; $data[$ip]['last_access_time'] = $current_time; $redis->set($dataname, json_encode($data)); return $period - ($current_time - $data[$ip]['last_access_time']); }