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分页函数
Jul 08 PHP
php生成文件
Jan 15 PHP
php模板之Phpbean的目录结构
Jan 10 PHP
php开发环境配置记录
Jan 14 PHP
PHP 图片水印类代码
Aug 27 PHP
php根据分类合并数组的方法实例详解
Nov 06 PHP
ThinkPHP3.1新特性之多数据库操作更加完善
Jun 19 PHP
PHP实现仿Google分页效果的分页函数
Jul 29 PHP
php给图片加文字水印
Jul 31 PHP
php利用smtp类实现电子邮件发送
Oct 30 PHP
Zend Framework入门知识点小结
Mar 19 PHP
laravel框架实现敏感词汇过滤功能示例
Feb 15 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
PHP操作数组相关函数
2011/02/03 PHP
Yii框架中 find findAll 查找出制定的字段的方法对比
2014/09/10 PHP
PHP使用Redis长连接的方法详解
2018/02/12 PHP
php libevent 功能与使用方法详解
2020/03/04 PHP
jQuery判断checkbox是否选中的小例子
2013/12/02 Javascript
JS对象转换为Jquery对象实现代码
2013/12/29 Javascript
jquery自动将form表单封装成json的具体实现
2014/03/17 Javascript
使用jquery animate创建平滑滚动效果(可以是到顶部、到底部或指定地方)
2014/05/27 Javascript
基于css3新属性transform及原生js实现鼠标拖动3d立方体旋转
2016/06/12 Javascript
js实现楼层效果的简单实例
2016/07/15 Javascript
聊一聊JS中的prototype
2016/09/29 Javascript
JS验证 只能输入小数点,数字,负数的实现方法
2016/10/07 Javascript
jQuery+Cookie实现切换皮肤功能【附源码下载】
2018/03/25 jQuery
浅谈layui框架自带分页和表格重载的接口解析问题
2019/09/11 Javascript
[28:42]Ti4正赛VG vs NEWBEE1
2014/07/19 DOTA
Python实现的Excel文件读写类
2015/07/30 Python
tensorflow实现对张量数据的切片操作方式
2020/01/19 Python
Python绘制全球疫情变化地图的实例代码
2020/04/20 Python
Django中使用Json返回数据的实现方法
2020/06/03 Python
python能做哪方面的工作
2020/06/15 Python
阿迪达斯西班牙官方网站:adidas西班牙
2016/07/21 全球购物
LN-CC中国:高端男装和女装的奢侈时尚目的地
2019/09/14 全球购物
英国最大的在线快递公司之一:ParcelHero
2019/11/04 全球购物
财务人员个人自荐信范文
2013/09/26 职场文书
教育课题研究自我鉴定范文
2013/12/28 职场文书
搞笑车尾标语
2014/06/23 职场文书
语文教研活动总结
2014/07/02 职场文书
写字楼租赁意向书
2014/07/30 职场文书
先进典型发言材料
2014/12/30 职场文书
测量员岗位职责
2015/02/14 职场文书
班主任寄语2016
2015/12/04 职场文书
导游词之新疆尼雅遗址
2019/10/16 职场文书
python 如何做一个识别率百分百的OCR
2021/05/29 Python
Java使用Unsafe类的示例详解
2021/09/25 Java/Android
Java版 简易五子棋小游戏
2022/05/04 Java/Android
Redis特殊数据类型bitmap位图
2022/06/01 Redis