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 相关文章推荐
实时抓取YAHOO股票报价的代码
Oct 09 PHP
dedecms系统常用术语汇总
Apr 03 PHP
apache+php完美解决301重定向的两种方法
Jun 08 PHP
二招解决php乱码问题
Mar 25 PHP
php中的常用魔术方法总结
Aug 02 PHP
浅析51个PHP处理字符串的函数
Aug 02 PHP
教你如何在CI框架中使用 .htaccess 隐藏url中index.php
Jun 09 PHP
PHP中大于2038年时间戳的问题处理方案
Mar 03 PHP
php中 $$str 中 &quot;$$&quot; 的详解
Jul 06 PHP
ThinkPHP路由机制简介
Mar 23 PHP
Yii2框架实现注册和登录教程
Sep 30 PHP
PHP pthreads v3下worker和pool的使用方法示例
Feb 21 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新手用的Insert和Update语句构造类
2012/03/31 PHP
JSON 教程 json入门学习笔记
2020/09/22 Javascript
javascript-表格排序(降序/反序)实现介绍(附图)
2013/05/30 Javascript
探讨js中的双感叹号判断
2013/11/11 Javascript
屏蔽IE弹出&quot;您查看的网页正在试图关闭窗口,是否关闭此窗口&quot;的方法
2013/12/31 Javascript
[原创]Bootstrap 中下拉菜单修改成鼠标悬停直接显示
2016/04/14 Javascript
jquery easyUI中ajax异步校验用户名
2016/08/19 Javascript
jQuery快速高效制作网页交互特效
2017/02/24 Javascript
微信小程序实战之自定义toast(6)
2017/04/18 Javascript
基于JavaScript实现多级菜单效果
2017/07/25 Javascript
微信小程序滑动选择器的实现代码
2018/08/10 Javascript
详解如何在Node.js的httpServer中接收前端发送的arraybuffer数据
2018/11/11 Javascript
让 babel webpack vue 配置文件支持智能提示的方法
2019/06/22 Javascript
js实现小星星游戏
2020/03/23 Javascript
Python实现向QQ群成员自动发邮件的方法
2014/11/19 Python
简单分析Python中用fork()函数生成的子进程
2015/05/04 Python
python获取元素在数组中索引号的方法
2015/07/15 Python
python基于物品协同过滤算法实现代码
2018/05/31 Python
解决Django中多条件查询的问题
2019/07/18 Python
Django xadmin开启搜索功能的实现
2019/11/15 Python
python 已知三条边求三角形的角度案例
2020/04/12 Python
Python3交互式shell ipython3安装及使用详解
2020/07/11 Python
Python描述数据结构学习之哈夫曼树篇
2020/09/07 Python
Python 求向量的余弦值操作
2021/03/04 Python
高校毕业生登记表自我鉴定
2013/11/03 职场文书
日语专业毕业生求职信
2013/12/04 职场文书
党支部对照检查材料
2014/08/25 职场文书
重点工程汇报材料
2014/08/27 职场文书
镇副书记专题民主生活会对照检查材料思想汇报
2014/10/02 职场文书
群众路线剖析材料(四风问题)
2014/10/08 职场文书
2014年效能监察工作总结
2014/11/21 职场文书
自荐信大全
2019/03/21 职场文书
mysql字符串截取函数小结
2021/04/05 MySQL
pytorch损失反向传播后梯度为none的问题
2021/05/12 Python
你真的了解redis为什么要提供pipeline功能
2021/06/22 Redis
JS前端宏任务微任务及Event Loop使用详解
2022/07/23 Javascript