PHP 只允许指定IP访问(允许*号通配符过滤IP)


Posted in PHP onJuly 08, 2014

核心函数代码如下:

/**
 * 检测访问的ip是否为规定的允许的ip
 * Enter description here ...
 */
function check_ip(){
	$ALLOWED_IP=array('192.168.2.*','127.0.0.1','192.168.2.49');
	$IP=getIP();
	$check_ip_arr= explode('.',$IP);//要检测的ip拆分成数组
	#限制IP
	if(!in_array($IP,$ALLOWED_IP)) {
		foreach ($ALLOWED_IP as $val){
		  if(strpos($val,'*')!==false){//发现有*号替代符
		  	 $arr=array();//
		  	 $arr=explode('.', $val);
		  	 $bl=true;//用于记录循环检测中是否有匹配成功的
		  	 for($i=0;$i<4;$i++){
		  	 	if($arr[$i]!='*'){//不等于* 就要进来检测,如果为*符号替代符就不检查
		  	 		if($arr[$i]!=$check_ip_arr[$i]){
		  	 			$bl=false;
		  	 			break;//终止检查本个ip 继续检查下一个ip
		  	 		}
		  	 	}
		  	 }//end for 
		  	 if($bl){//如果是true则找到有一个匹配成功的就返回
		  	 	return;
		  	 	die;
		  	 }
		  }
		}//end foreach
		header('HTTP/1.1 403 Forbidden');
		echo "Access forbidden";
		die;
	}
}
* 获得访问的IP 
* Enter description here ... 
*/ 
function getIP() { 
  return isset($_SERVER["HTTP_X_FORWARDED_FOR"])?$_SERVER["HTTP_X_FORWARDED_FOR"] 
  :(isset($_SERVER["HTTP_CLIENT_IP"])?$_SERVER["HTTP_CLIENT_IP"] 
  :$_SERVER["REMOTE_ADDR"]); 
}

在需要检测的地方 加上调用 check_ip(); 即可;  本函数提供只允许指定的IP访问文件,并提供IP中*号通配符 匹配多IP 

PHP 相关文章推荐
基于mysql的论坛(7)
Oct 09 PHP
模仿OSO的论坛(三)
Oct 09 PHP
理解PHP5中static和const关键字的区别
Mar 19 PHP
php 执行系统命令的方法
Jul 07 PHP
PHP高自定义性安全验证码代码
Nov 27 PHP
php定时计划任务与fsockopen持续进程实例
May 23 PHP
php实现两表合并成新表并且有序排列的方法
Dec 05 PHP
PHP获取用户访问IP地址的5种方法
May 16 PHP
ThinkPHP 整合Bootstrap Ajax分页样式
Dec 23 PHP
PHP学习笔记之session
May 06 PHP
laravel model模型处理之修改查询或修改字段时的类型格式案例
Oct 17 PHP
Laravel5.3+框架定义API路径取消CSRF保护方法详解
Apr 06 PHP
php中出现空白页的原因及解决方法汇总
Jul 08 #PHP
php之Smarty模板使用方法示例详解
Jul 08 #PHP
高性能PHP框架Symfony2经典入门教程
Jul 08 #PHP
Thinkphp的volist标签嵌套循环使用教程
Jul 08 #PHP
PHP实现生成透明背景的PNG缩略图函数分享
Jul 08 #PHP
PHP的error_reporting错误级别变量对照表
Jul 08 #PHP
PHP获取客户端真实IP地址的5种情况分析和实现代码
Jul 08 #PHP
You might like
PHP中实现汉字转区位码应用源码实例解析
2010/06/14 PHP
PHP ajax 异步执行不等待执行结果的处理方法
2015/05/27 PHP
linux下为php添加iconv模块的方法
2016/02/28 PHP
Yii2框架制作RESTful风格的API快速入门教程
2016/11/08 PHP
PHP实现绘制二叉树图形显示功能详解【包括二叉搜索树、平衡树及红黑树】
2017/11/16 PHP
PHP PDOStatement::rowCount讲解
2019/02/01 PHP
PHP中上传文件打印错误错误类型分析
2019/04/14 PHP
PHP实现chrome表单请求数据转换为接口使用的json数据
2021/03/04 PHP
新闻内页-JS分页
2006/06/07 Javascript
JavaScript中的this关键字介绍与使用实例
2013/06/21 Javascript
jquery内置验证(validate)使用方法示例(表单验证)
2013/12/04 Javascript
基于JS实现简单的样式切换效果代码
2015/09/04 Javascript
基于BootStrap Metronic开发框架经验小结【九】实现Web页面内容的打印预览和保存操作
2016/05/12 Javascript
jQuery Easyui快速入门教程
2016/08/21 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
AngularJS基于factory创建自定义服务的方法详解
2017/05/25 Javascript
Nodejs之TCP服务端与客户端聊天程序详解
2017/07/07 NodeJs
浅谈JS对象添加getter与setter的5种方法
2018/06/09 Javascript
微信开发之微信jssdk录音功能开发示例
2018/10/22 Javascript
Windows下Node爬虫神器Puppeteer安装记
2019/01/09 Javascript
微信小程序实现watch监听
2020/06/04 Javascript
wxPython 入门教程
2008/10/07 Python
Python常见加密模块用法分析【MD5,sha,crypt模块】
2017/05/24 Python
基于python元祖与字典与集合的粗浅认识
2017/08/23 Python
Sanic框架请求与响应实例分析
2018/07/16 Python
Python基于聚类算法实现密度聚类(DBSCAN)计算【测试可用】
2018/12/26 Python
使用Python做垃圾分类的原理及实例代码附源码
2019/07/02 Python
pandas和spark dataframe互相转换实例详解
2020/02/18 Python
威尔逊皮革:Wilsons Leather
2018/12/07 全球购物
测控技术与通信工程毕业生自荐信范文
2013/12/28 职场文书
期中考试反思800字
2014/05/01 职场文书
2014财务部年度工作总结
2014/12/08 职场文书
党员先进事迹材料
2014/12/19 职场文书
看雷锋电影观后感
2015/06/10 职场文书
Golang实现AES对称加密的过程详解
2021/05/20 Golang
MySQL分区表管理命令汇总
2022/03/21 MySQL