你可以通过增加一个配置文件,然后将需要禁止的一些 IP 地址通过一定规则添加到配置文件中,在程序初始化的时候,读取配置文件中的每个规则,然后通过本文提供的方法去检查当前访问的客户端 IP 地址是否存在于这些规则中,如果存在,则拒绝提供服务。 <div class="codetitle"><a style="CURSOR: pointer" data="61266" class="copybut" id="copybut61266" onclick="doCopy('code61266')"> 代码如下:<div class="codebody" id="code61266"> <?php /* PHP 中检查或过滤 IP 地址 支持 IP 区间、CIDR(Classless Inter-Domain Routing)及单个 IP 格式 整理:http://www.CodeBit.cn 参考: - {@link http://us2.php.net/manual/zh/function.ip2long.php#70055} - {@link http://us2.php.net/manual/zh/function.ip2long.php#82397} @param string $network 网段,支持 IP 区间、CIDR及单个 IP 格式 @param string $ip 要检查的 IP 地址 @return boolean */ function netMatch($network,$ip) { $network = trim($network); $ip = trim($ip); $result = false; // IP range : 174.129.0.0 - 174.129.255.255 if (false !== ($pos = strpos($network,"-"))) { $from = ip2long(trim(substr($network,$pos))); $to = ip2long(trim(substr($network,$pos+1))); $ip = ip2long($ip); $result = ($ip >= $from and $ip <= $to); // CIDR : 174.129.0.0/16 } else if (false !== strpos($network,"/")) { list ($net,$mask) = explode ('/',$network); $result = (ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($net); // single IP } else { $result = $network === $ip; } return $result; } // 174.129.0.0 - 174.129.255.255 var_dump(netMatch(' 174.129.0.0 - 174.129.255.255 ','174.129.1.31')); // True var_dump(netMatch(' 174.129.0.0/16 ','174.139.1.31')); // False var_dump(netMatch(' 174.129.1.32 ','174.129.1.31')); // False ?> 由于中国使用的大多数都是动态 IP 地址,所以通过 IP 地址限制访问具有一定的局限性,使用的时候需要谨慎,但是对于应急限制访问来说,还是非常有用的。 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|