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 相关文章推荐
PHP静态新闻列表自动生成代码
Jun 14 PHP
PHP 文件扩展名 获取函数
Jun 03 PHP
Windows IIS PHP 5.2 安装与配置方法
Jun 08 PHP
php获取当前网址url并替换参数或网址的方法
Jun 06 PHP
Codeigniter框架的更新事务(transaction)BUG及解决方法
Jul 25 PHP
使用PHP和HTML5 FormData实现无刷新文件上传教程
Sep 06 PHP
PHP实现简单搜歌的方法
Jul 28 PHP
php 数组处理函数extract详解及实例代码
Nov 23 PHP
PHP未登录自动跳转到登录页面
Dec 21 PHP
php实现和c#一致的DES加密解密实例
Jul 24 PHP
php实现的表单验证类完整示例
Aug 13 PHP
PhpSpreadsheet中文文档 | Spreadsheet操作教程实例
Apr 01 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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
用PHP编程开发“虚拟域名”系统
2006/10/09 PHP
php插入中文到sqlserver 2008里出现乱码的解决办法分享
2012/07/19 PHP
php笔记之:php数组相关函数的使用
2013/04/26 PHP
解析php session_set_save_handler 函数的用法(mysql)
2013/06/29 PHP
php结合正则批量抓取网页中邮箱地址
2015/05/19 PHP
变量在 PHP7 内部的实现(一)
2015/12/21 PHP
PHP获取用户客户端真实IP的解决方案
2016/10/10 PHP
Laravel框架实现利用中间件进行操作日志记录功能
2018/06/06 PHP
Yii框架学习笔记之应用组件操作示例
2019/11/13 PHP
学习js在线html(富文本,所见即所得)编辑器
2012/12/18 Javascript
jquery submit ie6下失效的原因分析及解决方法
2013/11/15 Javascript
js实现的四级左侧网站分类菜单实例
2015/05/06 Javascript
js实现温度计时间样式代码分享
2015/08/21 Javascript
js实现String.Fomat的实例代码
2016/09/02 Javascript
jQuery实现表格奇偶行显示不同背景色 就这么简单
2017/03/13 Javascript
JS/jquery实现一个网页内同时调用多个倒计时的方法
2017/04/27 jQuery
angular指令笔记ng-options的使用方法
2017/09/18 Javascript
vue.js使用v-model指令实现的数据双向绑定功能示例
2018/05/22 Javascript
在vue中多次调用同一个定义全局变量的实例
2018/09/25 Javascript
webpack实践之DLLPlugin 和 DLLReferencePlugin的使用教程
2019/06/10 Javascript
配置node服务器并且链接微信公众号接口配置步骤详解
2019/06/21 Javascript
百度小程序之间的页面通信过程详解
2019/07/18 Javascript
微信小程序 云开发模糊查询实现解析
2019/09/02 Javascript
vue+elementUI实现简单日历功能
2020/09/24 Javascript
[01:15:56]2018DOTA2亚洲邀请赛3月30日 小组赛A组 TNC VS Newbee
2018/03/31 DOTA
Python学习笔记(一)(基础入门之环境搭建)
2014/06/05 Python
Python引用(import)文件夹下的py文件的方法
2014/08/26 Python
中学实习教师自我鉴定
2013/12/12 职场文书
保护环境建议书100字
2014/05/13 职场文书
法人任命书范本
2014/06/04 职场文书
2014年宣传工作总结
2014/11/18 职场文书
2015会计试用期工作总结
2014/12/12 职场文书
个人收入证明范本
2015/06/12 职场文书
公司出差管理制度范本
2015/08/05 职场文书
python疲劳驾驶困倦低头检测功能的实现
2022/04/04 Python