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代码
Aug 08 PHP
php中常用字符串处理代码片段整理
Nov 07 PHP
基于PHP Web开发MVC框架的Smarty使用说明
Apr 19 PHP
php中time()和mktime()方法的区别
Sep 28 PHP
php中获取主机名、协议及IP地址的方法
Nov 18 PHP
PHP使用stream_context_create()模拟POST/GET请求的方法
Apr 02 PHP
Thinkphp3.2.3分页使用实例解析
Jul 28 PHP
php中array_slice和array_splice函数解析
Oct 18 PHP
PHP 二维关联数组根据其中一个字段排序(推荐)
Apr 04 PHP
php实现的后台表格分页功能示例
Oct 23 PHP
php抽象方法和普通方法的区别点总结
Oct 13 PHP
php慢查询日志和错误日志使用详解
Feb 27 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
真正面向对象编程:PHP5.01发布
2006/10/09 PHP
PHP中通过加号合并数组的一个简单方法分享
2011/01/27 PHP
PHP多维数组排序array详解
2017/11/21 PHP
PHP+fiddler抓包采集微信文章阅读数点赞数的思路详解
2019/12/20 PHP
用javascript来实现动画导航效果的代码
2007/12/16 Javascript
DOMAssitant最新版 DOMAssistant 2.5发布
2007/12/25 Javascript
zTree插件之多选下拉菜单实例代码
2013/11/06 Javascript
js四舍五入数学函数round使用实例
2014/05/09 Javascript
Js中使用hasOwnProperty方法检索ajax响应对象的例子
2014/12/08 Javascript
JQuery实现的购物车功能(可以减少或者添加商品并自动计算价格)
2015/01/13 Javascript
JS+CSS实现的蓝色table选项卡效果
2015/10/08 Javascript
js与jQuery实现checkbox复选框全选/全不选的方法
2016/01/05 Javascript
bootstrap配合Masonry插件实现瀑布式布局
2017/01/18 Javascript
node.js的事件机制
2017/02/08 Javascript
JavaScript实现按键精灵的原理分析
2017/02/21 Javascript
vue获取input输入值的问题解决办法
2017/10/17 Javascript
js 取消页面可以选中文字的功能方法
2018/01/02 Javascript
JavaScript常见事件对象与操作实例总结
2019/01/05 Javascript
Vue 组件参数校验与非props特性的方法
2019/02/12 Javascript
JavaScript实现拖拽盒子效果
2020/02/06 Javascript
vue mvvm数据响应实现
2020/11/11 Javascript
[46:02]DOTA2上海特级锦标赛D组资格赛#2 Liquid VS VP第二局
2016/02/28 DOTA
Python中的Classes和Metaclasses详解
2015/04/02 Python
浅谈pytorch和Numpy的区别以及相互转换方法
2018/07/26 Python
Python中__slots__属性介绍与基本使用方法
2018/09/05 Python
python数据处理 根据颜色对图片进行分类的方法
2018/12/08 Python
Python提取支付宝和微信支付二维码的示例代码
2019/02/15 Python
python3.6中@property装饰器的使用方法示例
2019/08/17 Python
python清空命令行方式
2020/01/13 Python
django 数据库返回queryset实现封装为字典
2020/05/19 Python
五分钟学会怎么用python做一个简单的贪吃蛇
2021/01/12 Python
HTML5中FileReader接口使用方法实例详解
2017/08/26 HTML / CSS
美国值得信赖的婚恋交友网站:eHarmony
2018/10/04 全球购物
2015年社会实践个人总结
2015/03/06 职场文书
债务追讨律师函
2015/06/24 职场文书
python pyhs2 的安装操作
2021/04/07 Python