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入门的学习方法
Jan 02 PHP
帖几个PHP的无限分类实现想法~
Jan 02 PHP
PHP setcookie设置Cookie用法(及设置无效的问题)
Jul 13 PHP
Apache下禁止php文件被直接访问的解决方案
Apr 25 PHP
PHP的mysqli_query参数MYSQLI_STORE_RESULT和MYSQLI_USE_RESULT的区别
Sep 29 PHP
php+Mysqli利用事务处理转账问题实例
Feb 11 PHP
php简单判断文本编码的方法
Jul 30 PHP
php封装的单文件(图片)上传类完整实例
Oct 18 PHP
php遍历替换目录下文件指定内容的方法
Nov 10 PHP
PHP封装的多文件上传类实例与用法详解
Feb 07 PHP
php使用 readfile() 函数设置文件大小大小的方法
Aug 11 PHP
PHP单例模式数据库连接类与页面静态化实现方法
Mar 20 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 缓存实现代码及详细注释
2010/05/16 PHP
PHP setcookie指定domain参数后,在IE下设置cookie失效的解决方法
2011/09/09 PHP
PHP中文编码小技巧
2014/12/25 PHP
PHP5.3以上版本安装ZendOptimizer扩展
2015/03/27 PHP
微信公众号支付之坑:调用支付jsapi缺少参数 timeStamp等错误解决方法
2016/01/12 PHP
PHP 网站修改默认访问文件的nginx配置
2017/05/27 PHP
JavaScript的Function详细
2006/11/14 Javascript
基于jQuery的输入框无值自动显示指定数据的实现代码
2011/01/24 Javascript
JS中怎样判断undefined(比较不错的方法)
2014/03/27 Javascript
封装获取dom元素的简单实例
2016/07/08 Javascript
JavaScript实现广告弹窗效果
2016/08/09 Javascript
详解Weex基于Vue2.0开发模板搭建
2017/03/20 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
angular6 填坑之sdk的方法
2018/12/27 Javascript
vue实现文字横向无缝走马灯组件效果的实例代码
2019/04/09 Javascript
jQuery实现条件搜索查询、实时取值及升降序排序的方法分析
2019/05/04 jQuery
Vue CLI3基础学习之pages构建多页应用
2019/06/02 Javascript
稍微学一下Vue的数据响应式(Vue2及Vue3区别)
2019/11/21 Javascript
vue-property-decorator用法详解
2019/12/12 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
[00:43]拉比克至宝魔导师密钥展示
2018/12/20 DOTA
python脚本设置系统时间的两种方法
2016/02/21 Python
Python简单获取自身外网IP的方法
2016/09/18 Python
python实现pdf转换成word/txt纯文本文件
2018/06/07 Python
基于数据归一化以及Python实现方式
2018/07/11 Python
python Selenium实现付费音乐批量下载的实现方法
2019/01/24 Python
python实现最大优先队列
2019/08/29 Python
python连接mongodb数据库操作数据示例
2020/11/30 Python
护士辞职信范文
2014/01/19 职场文书
运动会入场词50字
2014/02/20 职场文书
会计与审计专业自荐信范文
2014/03/15 职场文书
群众路线教育党员自我剖析材料
2014/10/06 职场文书
基层党员群众路线整改措施及努力方向
2014/10/28 职场文书
工程竣工验收申请报告
2015/05/15 职场文书
芙蓉镇观后感
2015/06/10 职场文书
Win11 Beta 22621.601 和 22622.601今日发布 KB5017384修复内容汇总
2022/09/23 数码科技