php过滤ip,支持地址段。

禁用词的架构设计、查询算法、套餐设计这些已经完成了,下周开始每天晚上花三个小时来进行编码。

进入正题,来写一下系统需要用到的,ip过滤地址段的实现方法

if(ip_match($ip_list,$_W['clientip'])){
    http_response_code(404);
    exit('IP禁止访问,如需解封请联系站长!');
}

function get_ip_list(){
    $ip_list = cache_read('ip_list');
    if(!$ip_list){
        $result = pdo_getall('ip_list','','ip');
        $ip_list = [];
        foreach ($result as $ip){
            $ip_list[] = $ip['ip'];
        }
        cache_write('ip_list',$ip_list);
    }
    return $ip_list;
}
//ip匹配
function ip_match($ip_list,$cur_ip){

    if(in_array($cur_ip,$ip_list)){
        return true;
    }

    foreach ($ip_list as $ip){


        //ip段
        $lip = explode('.',$ip);
        //正则匹配
        $regex = "/^";
        foreach ($lip as $cip){
            if ($cip != '*'){
                $regex .= $cip.".";
            }else{
                $regex .= "\d{0,3}.";
            }
        }
        $regex = substr($regex,0,strlen($regex)-1)."$/";
        if(preg_match($regex,$cur_ip)){
            return true;
        }
    }
    return false;

}


本文 暂无 评论

Top
在线咨询 ×

站长QQ:366131726

扫描添加客服微信

工作时间:早8:00 - 晚11:00