Karl 可以使用redis限制,
例如:
`
$redis = new Redis(); //创建Redis实例
$redis->connect('127.0.0.1',6379); //连接Redis
$key = 'user_ip:'.getIp(); //获取用户IP
$check = $redis->exists($key);
$limit = [
'num' = 5, //限制次数
'time' = 60 //限制时间(单位:秒)
];
//请求频率限制
if ($check) {
$redis->incr($key);
$num = $redis->get($key);
if($num >= $limit['num']){
die('请求太频繁,请稍后再试!');
}
} else {
$redis->set($key,1);
$redis->expire($key,limit['time']);
}
//$num = $redis->get($key);
//echo '第'.$num.'次';
//获取客户端IP
function getIp() {
if (isset($SERVER["HTTP_CLIENT_IP"]) && strcasecmp($SERVER["HTTP_CLIENT_IP"], "未知")) {
$ip = $SERVER["HTTP_CLIENT_IP"];
} else {
if (isset($SERVER["HTTP_X_FORWARDED_FOR"]) && strcasecmp($SERVER["HTTP_X_FORWARDED_FOR"], "未知")) {
$ip = $SERVER["HTTP_X_FORWARDED_FOR"];
} else {
if (isset($SERVER["REMOTE_ADDR"]) && strcasecmp($SERVER["REMOTE_ADDR"], "未知")) {
$ip = $SERVER["REMOTE_ADDR"];
} else {
if (isset ($SERVER['REMOTE_ADDR']) && $SERVER['REMOTE_ADDR'] && strcasecmp($SERVER['REMOTE_ADDR'],
"未知")
) {
$ip = $_SERVER['REMOTE_ADDR'];
} else {
$ip = "未知";
}
}
}
}
return ($ip);
}
`