php IP及IP段进行访问限制的代码


Posted in PHP onDecember 17, 2008

192.168.1.1 单个IP
192.168.1.* 这样代理 192.168.1.1-192.168.1-255
192.158.1.2-20 这样是代表192.158.1.2-192.158.1.20
也可以这样写 192.168.1.[1|2|3]
嘿嘿~一个方法不知道想法是否周全,拿出来大家讨论
使用
以下是引用片段:
$oBlock_ip = new block_ip();
$oBlock_ip->checkIP();
以下是引用片段:

<?php 
class block_ip { 
var $Block_ip = array("192.168.1.1","210.10.2.1-20","222.34.4.*"); 
function __construct(){ 
} 
function __destruct(){ 
} 
private function makePregIP($str){ 
if (strstr($str,"-")) { 
$aIP = explode(".",$str); 
foreach ($aIP as $k=>$v) { 
if (!strstr($v,"-")) { 
$preg_limit .= makePregIP($v); 
} else{ 
$aipNum = explode("-",$v); 
for($i=$aipNum[0];$i<=$aipNum[1];$i++){ 
$preg .=$preg?"|".$i:"[".$i; 
} 
$preg_limit .=strrpos($preg_limit,".",1)==(strlen($preg_limit)-1)?$preg."]":".".$preg."]"; 
} 
} 
}else{ 
$preg_limit .= $str."."; 
} 
return $preg_limit; 
} 
private function getAllBlockIP(){ 
if ($this->Block_ip) { 
foreach ($this->Block_ip as $k=>$v) { 
$ipaddres = $this->makePregIP($v->start_ip); 
$ip = str_ireplace(".","\.",$ipaddres); 
$ip = str_replace("*","[0-9]{1,3}",$ip); 
$ipaddres = "/".$ip."/"; 
$ip_list[] = $ipaddres; 
} 
} 
return $ip_list; 
} 
public function checkIP() { 
$iptable = $this->getAllBlockIP(); 
$IsJoined = true; 
//取得用户ip 
$Ip = $this->get_client_ip(); 
$Ip = trim($Ip); 
//剔除黑名单中的IP区段 
if ($iptable) { 
foreach($iptable as $value) { 
if (preg_match("{$value}",$Ip)) { 
$IsJoined = false; 
break; 
} 
} 
} 
//如果在ip黑名单中就执行如下操作 
if( !$IsJoined ){ 
echo "IP Error"; 
exit; 
} 
} 
private function get_client_ip(){ 
if (getenv("HTTP_CLIENT_IP") && strcasecmp(getenv("HTTP_CLIENT_IP"), "unknown")) 
$ip = getenv("HTTP_CLIENT_IP"); 
else if (getenv("HTTP_X_FORWARDED_FOR") && strcasecmp(getenv("HTTP_X_FORWARDED_FOR"), "unknown")) 
$ip = getenv("HTTP_X_FORWARDED_FOR"); 
else if (getenv("REMOTE_ADDR") && strcasecmp(getenv("REMOTE_ADDR"), "unknown")) 
$ip = getenv("REMOTE_ADDR"); 
else if (isset($_SERVER['REMOTE_ADDR']) && $_SERVER['REMOTE_ADDR'] && strcasecmp($_SERVER['REMOTE_ADDR'], "unknown")) 
$ip = $_SERVER['REMOTE_ADDR']; 
else 
$ip = "unknown"; 
return($ip); 
} 
} 
?>
PHP 相关文章推荐
PHP+FLASH实现上传文件进度条相关文件 下载
Jul 21 PHP
求PHP数组最大值,最小值的代码
Oct 31 PHP
PHP中函数rand和mt_rand的区别比较
Dec 26 PHP
基于PHP遍历数组的方法汇总分析
Jun 08 PHP
php算法实例分享
Jul 14 PHP
php读取txt文件并将数据插入到数据库
Feb 23 PHP
PHP中的use关键字及文件的加载详解
Nov 28 PHP
PHP中Notice错误常见解决方法
Apr 28 PHP
解析 thinkphp 框架中的部分方法
May 07 PHP
PHP实现的基于单向链表解决约瑟夫环问题示例
Sep 30 PHP
Laravel使用模型实现like模糊查询的例子
Oct 24 PHP
php 防护xss,PHP的防御XSS注入的终极解决方案
Apr 01 PHP
php mssql 数据库分页SQL语句
Dec 16 #PHP
linux下 C语言对 php 扩展
Dec 14 #PHP
php 文件状态缓存带来的问题
Dec 14 #PHP
快速开发一个PHP扩展图文教程
Dec 12 #PHP
PHP Google的translate API代码
Dec 10 #PHP
php escape URL编码
Dec 10 #PHP
php 破解防盗链图片函数
Dec 09 #PHP
You might like
在wamp集成环境下升级php版本(实现方法)
2013/07/01 PHP
thinkPHP5.1框架使用SemanticUI实现分页功能示例
2019/08/03 PHP
PHP读取XML文件的方法实例总结【DOMDocument及simplexml方法】
2019/09/10 PHP
jQuery中使用data()方法读取HTML5自定义属性data-*实例
2014/04/11 Javascript
javascript自定义的addClass()方法
2014/05/28 Javascript
使用vue.js制作分页组件
2016/06/27 Javascript
基于cssSlidy.js插件实现响应式手机图片轮播效果
2016/08/30 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
2017/02/06 Javascript
深入nodejs中流(stream)的理解
2017/03/27 NodeJs
AngularJS实现的回到顶部指令功能实例
2017/05/17 Javascript
基于JavaScript实现前端数据多条件筛选功能
2020/08/19 Javascript
浅谈Node.js 沙箱环境
2018/05/15 Javascript
js实现轮播图的完整代码
2020/10/26 Javascript
AngularJS修改model值时,显示内容不变的实例
2018/09/13 Javascript
echarts统计x轴区间的数值实例代码详解
2019/07/07 Javascript
[03:49]显微镜下的DOTA2第十五期—VG登基之路完美团
2014/06/24 DOTA
[47:42]Fnatic vs Liquid 2018国际邀请赛小组赛BO2 第一场 8.16
2018/08/17 DOTA
Python中内建函数的简单用法说明
2016/05/05 Python
在Python程序和Flask框架中使用SQLAlchemy的教程
2016/06/06 Python
python 对象和json互相转换方法
2018/03/22 Python
pandas 选取行和列数据的方法详解
2019/08/08 Python
Django框架之中间件MiddleWare的实现
2019/12/30 Python
Tensorflow之MNIST CNN实现并保存、加载模型
2020/06/17 Python
详解pycharm配置python解释器的问题
2020/10/15 Python
Django xadmin安装及使用详解
2020/10/26 Python
python元组拆包实现方法
2021/02/28 Python
东芝官网商城:还原日式美学,打造美好生活
2018/12/27 全球购物
Rowdy Gentleman服装和配饰:美好时光
2019/09/24 全球购物
Flesh Beauty官网:露华浓集团旗下彩妆品牌
2021/02/15 全球购物
大学生自我鉴定范文模板
2014/01/21 职场文书
cf战队收人广告词
2014/03/14 职场文书
群众路线查摆问题及整改措施
2014/10/10 职场文书
劳动纠纷调解协议书格式
2014/11/30 职场文书
2015年人力资源部工作总结
2015/04/30 职场文书
TypeScript中条件类型精读与实践记录
2021/10/05 Javascript
Python使用永中文档转换服务
2022/05/06 Python