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缩略图生成程式(需要GD库支持)
Mar 06 PHP
FleaPHP的安全设置方法
Sep 15 PHP
PHP--用万网的接口实现域名查询功能
Dec 13 PHP
探讨各种PHP字符串函数的总结分析
Jun 05 PHP
使用PHP下载CSS文件中的图片的代码
Sep 24 PHP
PHP中绘制图像的一些函数总结
Nov 19 PHP
php绘制圆形的方法
Jan 24 PHP
教你在PHPStorm中配置Xdebug
Jul 27 PHP
PHP实现生成带背景的图形验证码功能
Oct 03 PHP
php之header的不同用法总结(实例讲解)
Nov 28 PHP
thinkPHP利用ajax异步上传图片并显示、删除的示例
Sep 26 PHP
Laravel5.5+ 使用API Resources快速输出自定义JSON方法详解
Apr 06 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中一个控制字符串输出的函数
2006/10/09 PHP
ThinkPHP实现跨模块调用操作方法概述
2014/06/20 PHP
Laravel 手动开关 Eloquent 修改器的操作方法
2019/12/30 PHP
JavaScript 组件之旅(三):用 Ant 构建组件
2009/10/28 Javascript
jquery实现图片滚动效果的简单实例
2013/11/23 Javascript
现如今最流行的JavaScript代码规范
2014/03/08 Javascript
简单的JS时钟实例讲解
2016/01/13 Javascript
ES6记录异步函数的执行时间详解
2016/08/31 Javascript
jQuery实现邮箱下拉列表自动补全功能
2016/09/08 Javascript
Chrome调试折腾记之JS断点调试技巧
2017/09/11 Javascript
打造通用的匀速运动框架(实例讲解)
2017/10/17 Javascript
vue地区选择组件教程详解
2018/05/04 Javascript
bootstrap select2插件用ajax来获取和显示数据的实例
2018/08/09 Javascript
vue实现输入框的模糊查询的示例代码(节流函数的应用场景)
2019/09/01 Javascript
Threejs实现滴滴官网首页地球动画功能
2020/07/13 Javascript
vue实现简单的登录弹出框
2020/10/26 Javascript
Python自动化测试工具Splinter简介和使用实例
2014/05/13 Python
Python实现根据IP地址和子网掩码算出网段的方法
2015/07/30 Python
Python计算字符宽度的方法
2016/06/14 Python
python+matplotlib绘制旋转椭圆实例代码
2018/01/12 Python
Python爬虫实现全国失信被执行人名单查询功能示例
2018/05/03 Python
Python采集代理ip并判断是否可用和定时更新的方法
2018/05/07 Python
如何优雅地处理Django中的favicon.ico图标详解
2018/07/05 Python
tensorflow 加载部分变量的实例讲解
2018/07/27 Python
Python数据分析matplotlib设置多个子图的间距方法
2018/08/03 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
Python基于xlutils修改表格内容过程解析
2020/07/28 Python
大学生职业规划前言模板
2013/12/27 职场文书
珍珠奶茶店创业计划书
2014/01/11 职场文书
物流业务员岗位职责
2014/02/08 职场文书
合作协议书
2014/04/23 职场文书
医院志愿者活动总结
2015/05/06 职场文书
少先大队干部竞选稿
2015/11/20 职场文书
2016年感恩教师节校园广播稿
2015/12/18 职场文书
2016年优秀少先队辅导员事迹材料
2016/02/26 职场文书
苹果电脑mac os中货币符号快捷输入
2022/02/17 杂记