PHP 检查或过滤IP地址的解决办法
内容摘要
这篇文章主要为大家详细介绍了PHP 检查或过滤IP地址的简单示例,具有一定的参考价值,可以用来参考一下。
对PHP 中检查或过滤IP地址的实现代码对此感兴趣的朋友,看看idc笔记做
对PHP 中检查或过滤IP地址的实现代码对此感兴趣的朋友,看看idc笔记做
文章正文
这篇文章主要为大家详细介绍了PHP 检查或过滤IP地址的简单示例,具有一定的参考价值,可以用来参考一下。
对PHP 中检查或过滤IP地址的实现代码对此感兴趣的朋友,看看idc笔记做的技术笔记!你可以通过增加一个配置文件,然后将需要禁止的一些 IP 地址通过一定规则添加到配置文件中,在程序初始化的时候,读取配置文件中的每个规则,然后通过本文提供的方法去检查当前访问的客户端 IP 地址是否存在于这些规则中,如果存在,则拒绝提供服务。1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 | <code class = "php" > <?php /** * PHP 中检查或过滤 IP 地址 * * 支持 IP 区间、CIDR(Classless Inter-Domain Routing)及单个 IP 格式 * * @param string $network 网段,支持 IP 区间、CIDR及单个 IP 格式 * @param string $ip 要检查的 IP 地址 * @return boolean * @arrange 512-笔记网: www.idcnote.com */ 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 , 0, $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 /*** 来自php教程(www.idcnote.com) ***/ </code> |
注:关于PHP 检查或过滤IP地址的简单示例的内容就先介绍到这里,更多相关文章的可以留意
代码注释