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 相关文章推荐
php输出表格的实现代码(修正版)
Dec 29 PHP
php实现保存submit内容之后禁止刷新
Mar 19 PHP
php实现的发送带附件邮件类实例
Sep 22 PHP
PHP常用处理静态操作类
Apr 03 PHP
PHP生成静态HTML页面最简单方法示例
Apr 09 PHP
thinkphp微信开之安全模式消息加密解密不成功的解决办法
Dec 02 PHP
php中使用GD库做验证码
Mar 31 PHP
PHP根据key删除数组中指定的元素
Feb 28 PHP
YII2框架中日志的配置与使用方法实例分析
Mar 18 PHP
PHP使用PhpSpreadsheet操作Excel实例详解
Mar 26 PHP
PHP安全之register_globals的on和off的区别
Jul 23 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
php4的session功能评述(三)
2006/10/09 PHP
一步一步学习PHP(5) 类和对象
2010/02/16 PHP
在字符串指定位置插入一段字符串的php代码
2010/02/16 PHP
php array_push()数组函数:将一个或多个单元压入数组的末尾(入栈)
2011/07/12 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
PHP创建/删除/复制文件夹、文件
2016/05/03 PHP
PHP查询分页的实现代码
2017/06/09 PHP
为调试JavaScript添加输出窗口的代码
2010/02/07 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
js中AppendChild与insertBefore的用法详细解析
2013/12/16 Javascript
js中的caller和callee属性介绍和例子
2014/06/07 Javascript
基于jquery实现等比缩放图片
2014/12/03 Javascript
完美实现八种js焦点轮播图(下篇)
2020/04/20 Javascript
微信小程序调用PHP后台接口 解析纯html文本
2017/06/13 Javascript
一文让你彻底搞清楚javascript中的require、import与export
2017/09/24 Javascript
JS实现左边列表移到到右边列表功能
2018/03/28 Javascript
vue组件挂载到全局方法的示例代码
2018/08/02 Javascript
vue动态改变背景图片demo分享
2018/09/13 Javascript
通过seajs实现JavaScript的模块开发及按模块加载
2019/06/06 Javascript
jQuery-Citys省市区三级菜单联动插件使用详解
2019/07/26 jQuery
Vuex中实现数据状态查询与更改
2019/11/08 Javascript
Nuxt.js的路由跳转操作(页面跳转nuxt-link)
2020/11/06 Javascript
浅析python 中__name__ = '__main__' 的作用
2014/07/05 Python
Django objects.all()、objects.get()与objects.filter()之间的区别介绍
2017/06/12 Python
15行Python代码实现网易云热门歌单实例教程
2019/03/10 Python
Django异步任务之Celery的基本使用
2019/03/23 Python
python hash每次调用结果不同的原因
2019/11/21 Python
python3 使用ssh隧道连接mysql的操作
2020/12/05 Python
科茨沃尔德家居商店:Scotts of Stow
2018/06/29 全球购物
Yahoo-PHP面试题4
2012/05/05 面试题
教师个人剖析材料
2014/02/05 职场文书
材料专业大学毕业生自荐书
2014/07/02 职场文书
2014年销售员工作总结
2014/12/01 职场文书
2015年民主生活会发言材料
2014/12/15 职场文书
2016春节慰问信范文
2015/03/25 职场文书
十大最强火系宝可梦,喷火龙上榜,第一名有双火属性
2022/03/18 日漫