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 相关文章推荐
GD输出汉字的函数的分析
Oct 09 PHP
让你的PHP同时支持GIF、png、JPEG
Oct 09 PHP
PHP实现网上点歌(二)
Oct 09 PHP
PHP读取目录下所有文件的代码
Jan 07 PHP
PHP 5.0对象模型深度探索之类的静态成员
Mar 27 PHP
php中将网址转换为超链接的函数
Sep 02 PHP
解析yii数据库的增删查改
Jun 20 PHP
ThinkPHP实现跨模块调用操作方法概述
Jun 20 PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 PHP
php获取URL中带#号等特殊符号参数的解决方法
Sep 02 PHP
CI框架入门示例之数据库取数据完整实现方法
Nov 05 PHP
PHP swoole和redis异步任务实现方法分析
Aug 12 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初学者写及时补给skype用户充话费的小程序
2008/11/02 PHP
php中chdir()函数用法实例
2014/11/13 PHP
PHP实现验证码校验功能
2017/11/16 PHP
让插入到 innerHTML 中的 script 跑起来的实现代码
2006/07/01 Javascript
写出更好的JavaScript之undefined篇(上)
2009/11/22 Javascript
javascript 处理null及null值示例
2014/06/09 Javascript
ie8模式下click无反应点击option无反应的解决方法
2014/10/11 Javascript
javascript 动态创建表格
2015/01/08 Javascript
浅谈javascript的分号的使用
2015/05/12 Javascript
无缝滚动的简单实现代码(推荐)
2016/06/07 Javascript
jQuery动态移除和添加背景图片的方法详解
2017/03/07 Javascript
angular directive的简单使用总结
2017/05/24 Javascript
vuejs 切换导航条高亮(路由菜单高亮)的方法示例
2018/05/29 Javascript
ant-design-vue中tree增删改的操作方法
2020/11/03 Javascript
iview实现动态表单和自定义验证时间段重叠
2021/01/10 Javascript
[03:55]2014DOTA2国际邀请赛 Fnatic经理采访赢DK在情理之中
2014/07/10 DOTA
[00:33]2018DOTA2亚洲邀请赛TNC出场
2018/04/04 DOTA
netbeans7安装python插件的方法图解
2013/12/24 Python
Python中type的构造函数参数含义说明
2015/06/21 Python
python友情链接检查方法
2015/07/08 Python
python 中random模块的常用方法总结
2017/07/08 Python
python增加矩阵维度的实例讲解
2018/04/04 Python
python画折线图的程序
2018/07/26 Python
对dataframe数据之间求补集的实例详解
2019/01/30 Python
Python 互换字典的键值对实例
2019/02/12 Python
搭建python django虚拟环境完整步骤详解
2019/07/08 Python
python 实用工具状态机transitions
2020/11/21 Python
CSS3绘制圆角矩形的简单示例
2015/09/28 HTML / CSS
html5指南-4.使用Geolocation实现定位功能
2013/01/07 HTML / CSS
iostream与iostream.h的区别
2015/01/16 面试题
网上常见的一份Linux面试题(多项选择部分)
2015/02/07 面试题
init进程的作用
2015/08/20 面试题
球队口号
2014/06/18 职场文书
幼儿园开学家长寄语(2016春季)
2015/12/03 职场文书
浅谈如何提高PHP代码质量之端到端集成测试
2021/05/28 PHP
关于Oracle12C默认用户名system密码不正确的解决方案
2021/10/16 Oracle