序
第一次使用这个技术,感谢小松的慷慨送码。
代码
<?php
//实例化一个Redis
$redis = new Redis();
//Redis 连接
$redis->connect('127.0.0.1', 6379);
//获取客户端IP
$key=get_real_ip();
//限制次数访问次数
$limit = 1;
//获取一个key
$check = $redis->exists($key);
//判断key是否存在
if($check){
//将key中储存的数字值增一。如果key不存在,以0为key的初始值
$redis->incr($key);
//返回key所关联的字符串值。如果key不存在,返回nil。
$count = $redis->get($key);
//判断周期内的执行次数
if($count > 1){
exit('请求太频繁,请稍后再试!');
}
}else{
//将key中储存的数字值增一。如果key不存在,以0为key的初始值
$redis->incr($key);
//设置生命周期为x秒
$redis->expire($key,2);
}
//返回key所关联的字符串值。如果key不存在,返回nil。
$count = $redis->get($key);
//获取客户端真实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;
}
?>