检查ip是否在白名单/黑名单内

如果名单内都是固定的ip,直接in_array就行了,如果是包含*的,可以使用正则,但是数据量大的时候正则效率堪忧

//要检查的ip
$ip = '192.168.43.18';
//ip名单
$ip_list = ['117.20.43.58', '117.*.43.58', '117.20.*.*', '198.32.43.*', '34.88.201.205', '192.168.*.18', '158.20.11.22',  '217.20.45.66'];

public function checkip($ip, $ip_list)
{
        //检查ip
        if (in_array($ip, $ip_list)) {
            return '存在' ;
        }

        //检查包含*的情况
        $ips = explode('.', $ip);
        foreach ($ip_list as $row) {
            if (strpos($row, '*') === false) {
                continue;
            }
            $rows = explode('.', $row);
            foreach ($ips as $key => $val) {
                if ($rows[$key] != '*' && $rows[$key] != $val) {
                    continue 2;
                }
                if ($key == 3) {
                    return '存在';
                }
            }
        }
        return '不存在';
}

猜你喜欢

转载自www.cnblogs.com/lockey/p/9156067.html