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 相关文章推荐
用windows下编译过的eAccelerator for PHP 5.1.6实现php加速的使用方法
Sep 30 PHP
实用函数10
Nov 08 PHP
用js进行url编码后用php反解以及用php实现js的escape功能函数总结
Feb 08 PHP
php使用fsockopen函数发送post,get请求获取网页内容的方法
Nov 15 PHP
php实现读取手机客户端浏览器的类
Jan 09 PHP
php通过正则表达式记取数据来读取xml的方法
Mar 09 PHP
Nginx服务器上安装并配置PHPMyAdmin的教程
Aug 18 PHP
php无限分类使用concat如何实现
Nov 05 PHP
在WordPress中实现发送http请求的相关函数解析
Dec 29 PHP
php单例模式的简单实现方法
Jun 10 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
Yii2 批量插入、更新数据实例
Mar 15 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
同时提取多条新闻中的文本一例
2006/10/09 PHP
php强制运行广告的方法
2014/12/01 PHP
PHP实现的mysql主从数据库状态检测功能示例
2017/07/20 PHP
javascript 单例/单体模式(Singleton)
2011/04/07 Javascript
js统计页面的来访次数实现代码
2014/05/09 Javascript
FF(火狐)浏览器无法执行window.close()解决方案
2014/11/13 Javascript
javascript数组输出的两种方式
2015/01/13 Javascript
js 颜色选择插件
2017/01/23 Javascript
Bootstrap 表单验证formValidation 实现表单动态验证功能
2017/05/17 Javascript
seajs模块压缩问题与解决方法实例分析
2017/10/10 Javascript
JS随机排序数组实现方法分析
2017/10/11 Javascript
js 客户端打印html 并且去掉页眉、页脚的实例
2017/11/03 Javascript
微信小程序实现多宫格抽奖活动
2020/04/15 Javascript
Node.js中的child_process模块详解
2018/06/08 Javascript
Vue组件中的data必须是一个function的原因浅析
2018/09/03 Javascript
js实现图片跟随鼠标移动效果
2019/10/16 Javascript
.netcore+vue 实现压缩文件下载功能
2020/09/24 Javascript
微信小程序实现多张图片上传功能
2020/11/18 Javascript
[20:57]Ti4主赛事第三天开幕式
2014/07/21 DOTA
python检测远程udp端口是否打开的方法
2015/03/14 Python
python实现挑选出来100以内的质数
2015/03/24 Python
python实现颜色空间转换程序(Tkinter)
2015/12/31 Python
python3读取MySQL-Front的MYSQL密码
2017/05/03 Python
Python SMTP发送电子邮件的示例
2020/09/23 Python
HTML5样式控制示例代码
2013/11/27 HTML / CSS
HTML5 拖放(Drag 和 Drop)详解与实例代码
2017/09/14 HTML / CSS
NARS化妆品官方商店:美国彩妆品牌
2017/08/26 全球购物
Becextech新西兰:数码单反相机和手机在线商店
2018/04/27 全球购物
科颜氏香港官方网店:Kiehl’s香港
2021/03/07 全球购物
英语专业自荐书
2014/06/13 职场文书
中秋节活动总结
2014/08/29 职场文书
离婚协议书范文
2015/01/26 职场文书
教师廉洁自律个人总结
2015/02/10 职场文书
个人党性锻炼总结
2015/03/05 职场文书
《实心球》教学反思
2016/02/23 职场文书
漫画「古见同学有交流障碍症」第25卷封面公开
2022/03/21 日漫