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 相关文章推荐
在Windows中安装Apache2和PHP4的权威指南
Oct 09 PHP
PHP通用分页类page.php[仿google分页]
Aug 31 PHP
一些PHP Coding Tips(php小技巧)[2011/04/02最后更新]
May 02 PHP
phpmyadmin配置文件现在需要绝密的短密码(blowfish_secret)的2种解决方法
May 07 PHP
php计算两个坐标(经度,纬度)之间距离的方法
Apr 17 PHP
php根据一个给定范围和步进生成数组的方法
Jun 19 PHP
php的闭包(Closure)匿名函数初探
Feb 14 PHP
php while循环控制的简单实例
May 30 PHP
php微信开发之百度天气预报
Nov 18 PHP
PHP面向对象中new self()与 new static()的区别浅析
Aug 17 PHP
Laravel学习教程之本地化模块
Aug 18 PHP
PHP Socket网络操作类定义与用法示例
Aug 30 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
discuz安全提问算法
2007/06/06 PHP
php mysql_real_escape_string函数用法与实例教程
2013/09/30 PHP
PHP中new static()与new self()的区别异同分析
2014/08/22 PHP
smarty半小时快速上手入门教程
2014/10/27 PHP
php实现的css文件背景图片下载器代码
2014/11/11 PHP
PHP 生成N个不重复的随机数
2015/01/21 PHP
如何在旧的PHP系统中使用PHP 5.3之后的库
2015/12/02 PHP
基于thinkPHP类的插入数据库操作功能示例
2017/01/06 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
jQuery EasyUI 的EasyLoader功能介绍
2010/09/12 Javascript
你必须知道的Javascript知识点之&quot;单线程事件驱动&quot;的使用
2013/04/23 Javascript
关于include标签导致js路径找不到的问题分析及解决
2013/07/09 Javascript
JQuery拖动表头边框线调整表格列宽效果代码
2014/09/10 Javascript
javascript面向对象之对象的深入理解
2015/01/13 Javascript
vue-router 学习快速入门
2017/03/01 Javascript
vue2.0 中使用transition实现动画效果使用心得
2018/08/13 Javascript
Vue 组件注册实例详解
2019/02/23 Javascript
记录一次开发微信网页分享的步骤
2019/05/07 Javascript
js设置鼠标悬停改变背景色实现详解
2019/06/26 Javascript
javascript实现简易计算器功能
2020/09/23 Javascript
解决vue elementUI 使用el-select 时 change事件的触发问题
2020/11/17 Vue.js
有关Python的22个编程技巧
2018/08/29 Python
python实现网站用户名密码自动登录功能
2019/08/09 Python
Django之choices选项和富文本编辑器的使用详解
2020/04/01 Python
python可视化分析的实现(matplotlib、seaborn、ggplot2)
2021/02/03 Python
女性时尚在线:IVRose
2019/02/23 全球购物
俄罗斯宠物用品网上商店:ZooMag
2019/12/12 全球购物
过滤器的用法
2013/10/08 面试题
医院合作意向书范本
2015/05/08 职场文书
2016年中秋节晚会领导致辞
2015/11/26 职场文书
文明医院的标语集锦!
2019/07/24 职场文书
Mysql实现主从配置和多主多从配置
2021/06/02 MySQL
Java输出Hello World完美过程解析
2021/06/13 Java/Android
解决SpringCloud Feign传对象参数调用失败的问题
2021/06/23 Java/Android
Spring中bean的生命周期之getSingleton方法
2021/06/30 Java/Android