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


Posted in PHP onNovember 27, 2011

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

<?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, 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 
?>

由于中国使用的大多数都是动态 IP 地址,所以通过 IP 地址限制访问具有一定的局限性,使用的时候需要谨慎,但是对于应急限制访问来说,还是非常有用的。
PHP 相关文章推荐
第十三节 对象串行化 [13]
Oct 09 PHP
dedecms防止FCK乱格式化你的代码的修改方法
Mar 17 PHP
php Mysql日期和时间函数集合
Nov 16 PHP
php access 数据连接与读取保存编辑数据的实现代码
May 12 PHP
PHP中isset()和unset()函数的用法小结
Mar 11 PHP
win7 64位系统 配置php最新版开发环境(php+Apache+mysql)
Aug 15 PHP
ThinkPHP登录功能的实现方法
Aug 20 PHP
PHP准确取得服务器IP地址的方法
Jun 02 PHP
php实现有序数组打印或排序的方法【附Python、C及Go语言实现代码】
Nov 10 PHP
php面向对象程序设计中self与static的区别分析
May 21 PHP
PHP设计模式之建造者模式(Builder)原理与用法案例详解
Dec 12 PHP
PHP正则表达式函数preg_replace用法实例分析
Jun 04 PHP
PHP中usort在值相同时改变原始位置问题的解决方法
Nov 27 #PHP
PHP中strtotime函数使用方法详解
Nov 27 #PHP
遍历指定目录下的所有目录和文件的php代码
Nov 27 #PHP
用PHP写的基于Memcache的Queue实现代码
Nov 27 #PHP
PHP中去除换行解决办法小结(PHP_EOL)
Nov 27 #PHP
php操作SVN版本服务器类代码
Nov 27 #PHP
支持中文的php加密解密类代码
Nov 27 #PHP
You might like
snoopy PHP版的网络客户端提供本地下载
2008/04/15 PHP
解析strtr函数的效率问题
2013/06/26 PHP
PHP+FastCGI+Nginx配置PHP运行环境
2014/08/07 PHP
PHP中使用localhost连接Mysql不成功的解决方法
2014/08/20 PHP
php封装的图片(缩略图)处理类完整实例
2016/10/19 PHP
PHP检测接口Traversable用法详解
2017/12/29 PHP
教你如何解密js/vbs/vbscript加密的编码异处理小结
2008/06/25 Javascript
javascript parseInt与Number函数的区别
2010/01/21 Javascript
基于jquery的设置页面文本框 只能输入数字的实现代码
2011/04/19 Javascript
JqueryMobile动态生成listView并实现刷新的两种方法
2014/03/05 Javascript
jQuery实现的图片分组切换焦点图插件
2015/01/06 Javascript
jQuery中animate动画第二次点击事件没反应
2015/05/07 Javascript
深入php面向对象、模式与实践
2016/02/16 Javascript
js基本算法:冒泡排序,二分查找的简单实例
2016/10/08 Javascript
js HTML5多媒体影音播放
2016/10/17 Javascript
BootStrap 实现各种样式的进度条效果
2016/12/07 Javascript
vue 不使用select实现下拉框功能(推荐)
2018/05/17 Javascript
webpack里使用jquery.mCustomScrollbar插件的方法
2018/05/30 jQuery
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
微信小程序实现星星评价效果
2018/11/02 Javascript
p5.js临摹旋转爱心
2019/10/23 Javascript
js里面的变量范围分享
2020/07/18 Javascript
详解vue组件之间的通信
2020/08/30 Javascript
[54:53]2014 DOTA2国际邀请赛中国区预选赛 LGD-GAMING VS CIS 第二场
2014/05/23 DOTA
python中wx将图标显示在右下角的脚本代码
2013/03/08 Python
对于Python中线程问题的简单讲解
2015/04/03 Python
详解Python中的各种函数的使用
2015/05/24 Python
python 实现查询Neo4j多节点的多层关系
2019/12/23 Python
python下载卫星云图合成gif的方法示例
2020/02/18 Python
在PyCharm中安装PaddlePaddle的方法
2021/02/05 Python
全球最大的服务市场:Fiverr
2017/01/03 全球购物
德国购买健身器材:AsVIVA
2017/08/09 全球购物
自我鉴定书面格式
2014/01/13 职场文书
2014年酒店年度工作总结
2014/12/10 职场文书
2015关爱留守儿童工作总结
2014/12/12 职场文书
2014年银行年终工作总结
2014/12/19 职场文书