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的历史和优缺点
Oct 09 PHP
Ajax+PHP 边学边练之四 表单
Nov 27 PHP
PHP编码转换函数 自动转换字符集支持数组转换
Dec 16 PHP
php简单开启gzip压缩方法(zlib.output_compression)
Apr 13 PHP
使用php实现下载生成某链接快捷方式的解决方法
May 07 PHP
PHP抓屏函数实现屏幕快照代码分享
Jan 02 PHP
Thinkphp搜索时首页分页和搜索页保持条件分页的方法
Dec 05 PHP
php 开发中加密的几种方法总结
Mar 22 PHP
PHP实现求解最长公共子串问题的方法
Nov 17 PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 PHP
laravel + vue实现的数据统计绘图(今天、7天、30天数据)
Jul 31 PHP
tp5.1 框架路由操作-URL生成实例分析
May 26 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/07/29 PHP
php购物车实现代码
2011/10/10 PHP
PHP快速排序算法实现的原理及代码详解
2019/04/03 PHP
PHP字符串和十六进制如何实现互相转换
2020/07/16 PHP
关于Aptana Studio生成自动备份文件的解决办法
2009/12/23 Javascript
DIV菜单层实现代码
2010/11/19 Javascript
JQuery学习笔记 nt-child的使用
2011/01/17 Javascript
解决checkbox的attr(checked)一直为undefined问题
2014/06/16 Javascript
javascript中使用正则表达式清理table样式的代码
2020/04/01 Javascript
AngularJS入门教程之REST和定制服务详解
2016/08/19 Javascript
Ubuntu系统下Angularjs开发环境安装
2016/09/01 Javascript
JQuery实现列表中复选框全选反选功能封装(推荐)
2016/11/24 Javascript
JavaScript实现自定义媒体播放器方法介绍
2017/01/03 Javascript
简单实现bootstrap导航效果
2017/02/07 Javascript
无限循环轮播图之运动框架(原生JS实现)
2017/10/01 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
vue-for循环嵌套操作示例
2019/01/28 Javascript
VsCode与Node.js知识点详解
2019/09/05 Javascript
vue.js实现二级菜单效果
2019/10/19 Javascript
vue实现购物车案例
2020/05/30 Javascript
[00:03]DOTA2新版本PA至宝展示
2014/11/19 DOTA
举例区分Python中的浅复制与深复制
2015/07/02 Python
Django中使用locals()函数的技巧
2015/07/16 Python
Python的Flask框架中使用Flask-Migrate扩展迁移数据库的教程
2016/06/14 Python
小议Python中自定义函数的可变参数的使用及注意点
2016/06/21 Python
对python list 遍历删除的正确方法详解
2018/06/29 Python
python爬虫自动创建文件夹的功能
2018/08/01 Python
Python中函数参数调用方式分析
2018/08/09 Python
python 读取dicom文件,生成info.txt和raw文件的方法
2019/01/24 Python
Flask框架学习笔记之路由和反向路由详解【图文与实例】
2019/08/12 Python
Tensorflow轻松实现XOR运算的方式
2020/02/03 Python
环境卫生标语
2014/06/09 职场文书
党的群众路线调研报告
2014/11/03 职场文书
故意伤害辩护词
2015/05/21 职场文书
家长通知书家长意见
2015/06/03 职场文书
Java面试题冲刺第十九天--数据库(4)
2021/08/07 Java/Android