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实现把MySQL数据库导出为.sql文件实例(仿PHPMyadmin导出功能)
May 10 PHP
PHP图像处理之使用imagecolorallocate()函数设置颜色例子
Nov 19 PHP
Laravel 5.0 发布 新版本特性详解
Feb 10 PHP
CodeIgniter配置之autoload.php自动加载用法分析
Jan 20 PHP
Symfony2框架学习笔记之表单用法详解
Mar 18 PHP
PHP函数shuffle()取数组若干个随机元素的方法分析
Apr 02 PHP
thinkphp框架实现删除和批量删除
Jun 29 PHP
PHPExcel导出2003和2007的excel文档功能示例
Jan 04 PHP
PHP设计模式之建造者模式定义与用法简单示例
Aug 13 PHP
PhpStorm的使用教程(本地运行PHP+远程开发+快捷键)
Mar 26 PHP
yii 框架实现按天,月,年,自定义时间段统计数据的方法分析
Apr 04 PHP
php swoft框架实例用法
Dec 22 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/08/08 PHP
javascript 学习之旅 (2)
2009/02/05 Javascript
JQuery 无废话系列教程(二) jquery实战篇上
2009/06/23 Javascript
基于jQuery试卷自动排版系统
2010/07/18 Javascript
jquery post方式传递多个参数值后台以数组的方式进行接收
2013/01/11 Javascript
Jquery选择子控件&quot;大于号&quot;和&quot; &quot;区别介绍及使用示例
2013/06/25 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
js 走马灯简单实例
2013/11/21 Javascript
js判断上传文件类型判断FileUpload文件类型代码
2014/05/20 Javascript
js判断是否按下了Shift键的方法
2015/01/27 Javascript
详解 javascript中offsetleft属性的用法
2015/11/11 Javascript
使用jquery获取url以及jquery获取url参数的实现方法
2016/05/25 Javascript
jQuery ajax中使用confirm,确认是否删除的简单实例
2016/06/17 Javascript
JS实现移动端实时监听输入框变化的实例代码
2017/04/12 Javascript
Vue2.0基于vue-cli+webpack父子组件通信(实例讲解)
2017/09/14 Javascript
vue实现的仿淘宝购物车功能详解
2019/01/27 Javascript
浅谈vue.use()方法从源码到使用
2019/05/12 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
JS防抖和节流实例解析
2019/09/24 Javascript
Javascript 关于基本类型和引用类型的个人理解
2019/11/01 Javascript
element中table高度自适应的实现
2020/10/21 Javascript
Python设计足球联赛赛程表程序的思路与简单实现示例
2016/06/28 Python
Python科学计算之Pandas详解
2017/01/15 Python
用Python登录好友QQ空间点赞的示例代码
2017/11/04 Python
对Python实现累加函数的方法详解
2019/01/23 Python
keras CNN卷积核可视化,热度图教程
2020/06/22 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
字中字效果的实现【html5实例】
2016/05/03 HTML / CSS
业务副厂长岗位职责
2014/01/03 职场文书
致跳远、跳高运动员广播稿
2014/01/09 职场文书
国培教师自我鉴定
2014/02/12 职场文书
就职演讲稿范文
2014/05/19 职场文书
考察邀请函范文
2015/01/31 职场文书
工作感想范文
2015/08/07 职场文书
职场领导同事生日简短祝福语
2019/08/06 职场文书
用golang如何替换某个文件中的字符串
2021/04/25 Golang