PHP Redis限制单ip的访问次数

发表于 : 2017-10-03   · CC BY-NC-SA 4.0 ·   2059 人浏览

本人测试系统: CentOS Linux 7.4.1708 (Core)  Apache 2.4  PhP7.1

<?php 
$redis = new Redis(); 
$redis->connect('127.0.0.1', 6379); 
$key=get_real_ip(); 
 
//限制次数为10 
$limit = 10; 
 
$check = $redis->exists($key); 
if($check){ 
 $redis->incr($key); 
 $count = $redis->get($key); 
 if($count > $limit){ 
 exit('请求太频繁,请稍后再试!'); 
 } 
}else{ 
 $redis->incr($key); 
 //限制时间为60秒 
 $redis->expire($key,60); 
} 
 
$count = $redis->get($key); 
echo '第 '.$count.' 次请求'; 
 
//获取客户端真实ip地址 
function get_real_ip(){ 
 static $realip; 
 if(isset($_SERVER)){ 
 if(isset($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
 $realip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
 }else if(isset($_SERVER['HTTP_CLIENT_IP'])){ 
 $realip=$_SERVER['HTTP_CLIENT_IP']; 
 }else{ 
 $realip=$_SERVER['REMOTE_ADDR']; 
 } 
 }else{ 
 if(getenv('HTTP_X_FORWARDED_FOR')){ 
 $realip=getenv('HTTP_X_FORWARDED_FOR'); 
 }else if(getenv('HTTP_CLIENT_IP')){ 
 $realip=getenv('HTTP_CLIENT_IP'); 
 }else{ 
 $realip=getenv('REMOTE_ADDR'); 
 } 
 } 
 return $realip; 
} 
?>

 

IP PHP Redis 限制访问