• 欢迎访问搞代码网站,推荐使用最新版火狐浏览器和Chrome浏览器访问本网站!
  • 如果您觉得本站非常有看点,那么赶紧使用Ctrl+D 收藏搞代码吧

PHP 中检查或过滤IP地址的实现代码_php技巧

php 搞代码 3年前 (2022-01-26) 14次浏览 已收录 0个评论

你可以通过增加一个配置文件,然后将需要禁止的一些 IP 地址通过一定规则添加到配置文件中,在程序初始化的时候,读取配置文件中的每个规则,然后通过本文提供的方法去检查当前访问的客户端 IP 地址是否存在于这些规则中,如果存在,则拒绝提供服务。

 <BR><?php <BR>/** <BR>* PHP 中检查或过滤 IP 地址 <BR>* <BR>* 支持 IP 区间、CIDR(Classless Inter-Domain Routing)及单个 IP 格式 <BR>* 整理:http://www.CodeBit.cn <BR>* 参考: <BR>* - {@link http://us2.php.net/manual/zh/function.ip2long.php#70055} <BR>* - {@link http://us2.php.net/manual/zh/function.ip2long.php#82397} <BR>* <BR>* @param string $network 网段,支持 IP 区间、CIDR及单个 IP 格式 <BR>* @param string $ip 要检查的 IP 地址 <BR>* @return boolean <BR>*/ <BR>function netMatch($network, $ip) { <BR>$network = trim($network); <BR>$ip = trim($ip); <BR>$result = false; <BR>// IP range : 174.129.0.0 - 174.129.255.255 <BR>if (false !== ($pos = strpos($network, "-"))) { <BR>$from = ip2long(trim(substr($network, 0, $pos))); <BR>$to = ip2long(trim(substr($network, $pos+1))); <BR>$ip = ip2long($ip); <BR>$result = ($ip >= $from and $ip <= $to); <BR>// CIDR : 174.129.0.0/16 <BR>} else if (false !== strpos($network,"/")) { <BR>list ($net, $mask) = explode ('/', $network); <BR>$result = (ip2long($ip) & ~((1 << (32 - $mask)) - 1)) == ip2long($net); <BR>// single IP <BR>} else { <BR>$result = $network === $ip; <BR>} <BR>return $result; <BR>} <BR>// 174.129.0.0 - 174.129.255.255 <BR>var_dump(netMatch(' 174.129.0.0 - 174.129.255.255 ', '174.129.1.31')); // True <BR>var_dump(netMatch(' 174.129.0.0/16 ', '174.139.1.31')); // False <BR>var_dump(netMatch(' 174.129.1.32 ', '174.129.1.31')); // False <BR>?> <BR>


由于中国使用的大多数都是动态 IP 地址,所以通过 IP本文来源[email protected]搞@^&代*@码)网9搞代gaodaima码 地址限制访问具有一定的局限性,使用的时候需要谨慎,但是对于应急限制访问来说,还是非常有用的。


搞代码网(gaodaima.com)提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发送到邮箱[email protected],我们会在看到邮件的第一时间内为您处理,或直接联系QQ:872152909。本网站采用BY-NC-SA协议进行授权
转载请注明原文链接:PHP 中检查或过滤IP地址的实现代码_php技巧
喜欢 (0)
[搞代码]
分享 (0)
发表我的评论
取消评论

表情 贴图 加粗 删除线 居中 斜体 签到

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址