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遍历二维数组的代码
Apr 22 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
php自动加载机制的深入分析
Jun 08 PHP
利用phpExcel实现Excel数据的导入导出(全步骤详细解析)
Nov 26 PHP
thinkphp的c方法使用示例
Feb 24 PHP
yii上传文件或图片实例
Apr 01 PHP
Yii的CDbCriteria查询条件用法实例
Dec 04 PHP
PHP mysql事务问题实例分析
Jan 18 PHP
PHP简单获取及判断提交来源的方法
Apr 22 PHP
PHP实现字符串的全排列详解
Apr 24 PHP
PHP开启目录引索+fancyindex漂亮目录浏览带搜索功能
Sep 23 PHP
PHP 对象接口简单实现方法示例
Apr 13 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中的串行化变量和序列化对象
2006/09/05 PHP
PHP登陆后跳转到登陆前页面实现思路及代码
2014/01/17 PHP
php sybase_fetch_array使用方法
2014/04/15 PHP
PHP中copy on write写时复制机制介绍
2014/05/13 PHP
php中__destruct与register_shutdown_function执行的先后顺序问题
2014/10/17 PHP
Laravel实现表单提交
2017/05/07 PHP
BOOM vs RR BO5 第一场 2.14
2021/03/10 DOTA
遨游,飞飞,IE,空中网 浏览器无提示关闭方法
2011/07/11 Javascript
jquery向上向下取整适合分页查询
2014/09/06 Javascript
一个jquery实现的不错的多行文字图片滚动效果
2014/09/28 Javascript
JavaScript保存并运算页面中数字类型变量的写法
2015/07/06 Javascript
jquery动态切换背景图片的简单实现方法
2016/05/14 Javascript
jQuery图片轮播(二)利用构造函数和原型创建对象以实现继承
2016/12/06 Javascript
bootstrap导航条实现代码
2016/12/28 Javascript
JS对象的深度克隆方法示例
2017/03/16 Javascript
Vue.js鼠标悬浮更换图片功能
2017/05/17 Javascript
js 开发之autocomplete=&quot;off&quot;在chrom中失效的解决办法
2017/09/28 Javascript
javascript数组定义的几种方法
2017/10/06 Javascript
javascript前端和后台进行数据交互方法示例
2020/08/07 Javascript
[56:01]2018DOTA2亚洲邀请赛 3.31 小组赛 B组 Effect vs EG
2018/03/31 DOTA
使用Python脚本将绝对url替换为相对url的教程
2015/04/24 Python
Python自动化测试Eclipse+Pydev 搭建开发环境
2016/08/15 Python
Python实现多线程抓取网页功能实例详解
2017/06/08 Python
Python SVM(支持向量机)实现方法完整示例
2018/06/19 Python
python django model联合主键的例子
2019/08/06 Python
python画图常规设置方式
2020/03/05 Python
Python基于unittest实现测试用例执行
2020/11/25 Python
给护士表扬信
2014/01/19 职场文书
老同学聚会感言
2014/02/23 职场文书
幼儿园校园小喇叭广播稿
2014/10/17 职场文书
医务人员医德考评自我评价
2015/03/03 职场文书
会议通知
2015/04/15 职场文书
小学生光盘行动倡议书
2015/04/28 职场文书
摩登时代观后感
2015/06/03 职场文书
钢铁是怎样炼成的读书笔记
2015/06/29 职场文书
校园音乐节目广播稿
2015/08/19 职场文书