php实现ip白名单黑名单功能


Posted in PHP onMarch 12, 2015

这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等.

/**

 * 安全IP检测,支持IP段检测

 * @param string $ip 要检测的IP

 * @param string|array $ips  白名单IP或者黑名单IP

 * @return boolean true 在白名单或者黑名单中,否则不在

 */

function is_safe_ip($ip="",$ips=""){ 

    if(!$ip) $ip = get_client_ip();  //获取客户端IP

    if($ips){

        if(is_string($ips)){ //ip用"," 例如白名单IP:192.168.1.13,123.23.23.44,193.134.*.*

            $ips = explode(",", $ips);

        }

    }else{ //读取后台配置 白名单IP

        $obj = new Setting();

        $ips = explode(",", $obj->getConfig("whiteip"));  

    }

    if(in_array($ip, $ips)){

        return true;

    }

    $ipregexp = implode('|', str_replace( array('*','.'), array('\d+','\.') ,$ips));  

    $rs = preg_match("/^(".$ipregexp.")$/", $ip);  

    if($rs) return true;

    return ;

}

获取ip地址,这里引用thinkphp内置函数

//应网友要求,贴出 get_client_ip() 函数

/**

 * 获取客户端IP地址

 * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字

 * @param boolean $adv 是否进行高级模式获取(有可能被伪装) 

 * @return mixed

 */

function get_client_ip($type = 0,$adv=false) {

    $type       =  $type ? 1 : 0;

    static $ip  =   NULL;

    if ($ip !== NULL) return $ip[$type];

    if($adv){

        if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {

            $arr    =   explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);

            $pos    =   array_search('unknown',$arr);

            if(false !== $pos) unset($arr[$pos]);

            $ip     =   trim($arr[0]);

        }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {

            $ip     =   $_SERVER['HTTP_CLIENT_IP'];

        }elseif (isset($_SERVER['REMOTE_ADDR'])) {

            $ip     =   $_SERVER['REMOTE_ADDR'];

        }

    }elseif (isset($_SERVER['REMOTE_ADDR'])) {

        $ip     =   $_SERVER['REMOTE_ADDR'];

    }

    // IP地址合法验证

    $long = sprintf("%u",ip2long($ip));

    $ip   = $long ? array($ip, $long) : array('0.0.0.0', 0);

    return $ip[$type];

}

以上就是本文的全部内容了,希望对大家理解php检测IP有所帮助。

PHP 相关文章推荐
PHP+Mysql+jQuery实现发布微博程序 jQuery篇
Oct 08 PHP
PHP实现时间轴函数代码
Oct 08 PHP
一个PHP并发访问实例代码
Sep 06 PHP
用php来改写404错误页让你的页面更友好
Jan 24 PHP
解析php做推送服务端实现ios消息推送
Jul 01 PHP
ThinkPHP中的create方法与自动令牌验证实例教程
Aug 22 PHP
9个实用的PHP代码片段分享
Jan 22 PHP
JavaScript与HTML结合的基本使用方法整理
Oct 12 PHP
作为程序员必知的16个最佳PHP库
Dec 09 PHP
PHP简单装饰器模式实现与用法示例
Jun 22 PHP
Laravel5.5 实现后台管理登录的方法(自定义用户表登录)
Sep 30 PHP
laravel5.6 框架邮件队列database驱动简单demo示例
Jan 26 PHP
php操作(删除,提取,增加)zip文件方法详解
Mar 12 #PHP
PHP往XML中添加节点的方法
Mar 12 #PHP
PHP遍历XML文档所有节点的方法
Mar 12 #PHP
标准PHP的AES加密算法类
Mar 12 #PHP
php接口数据加密、解密、验证签名
Mar 12 #PHP
php查询相似度最高的字符串的方法
Mar 12 #PHP
PHP实现通用alert函数的方法
Mar 11 #PHP
You might like
德生PL660的电路分析和打磨
2021/03/02 无线电
PHP 读取文件内容代码(txt,js等)
2009/12/06 PHP
php set_include_path函数设置 include_path 配置选项
2016/10/30 PHP
jquery 最简单的属性菜单
2009/10/08 Javascript
验证javascript中Object和Function的关系的三段简单代码
2010/06/27 Javascript
js RuntimeObject() 获取ie里面自定义函数或者属性的集合
2010/11/23 Javascript
js 编程笔记 无名函数
2011/06/28 Javascript
javascript学习笔记(八) js内置对象
2012/06/19 Javascript
javascript实现的简单的表单验证
2015/07/10 Javascript
js实现类似菜单风格的TAB选项卡效果代码
2015/08/28 Javascript
使用 jQuery.ajax 上传带文件的表单遇到的问题
2016/10/31 Javascript
AngularJS创建一个上传照片的指令实例代码
2018/02/24 Javascript
node命令行工具之实现项目工程自动初始化的标准流程
2019/08/12 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
微信小程序实现天气预报功能(附源码)
2020/12/10 Javascript
node.js文件的复制、创建文件夹等相关操作
2021/02/05 Javascript
[37:29]完美世界DOTA2联赛PWL S2 LBZS vs Forest 第二场 11.19
2020/11/19 DOTA
Python中的tuple元组详细介绍
2015/02/02 Python
python数据结构链表之单向链表(实例讲解)
2017/07/25 Python
django传值给模板, 再用JS接收并进行操作的实例
2018/05/28 Python
python基于http下载视频或音频
2018/06/20 Python
PyQt5实现简易计算器
2020/05/30 Python
python腾讯语音合成实现过程解析
2019/08/01 Python
Python 实现毫秒级淘宝抢购脚本的示例代码
2019/09/16 Python
Python第三方包之DingDingBot钉钉机器人
2020/04/09 Python
python和c语言哪个更适合初学者
2020/06/22 Python
详解python tcp编程
2020/08/24 Python
英国女性时尚精品店:THE DRESSING ROOM
2018/05/23 全球购物
Simons官方网站:加拿大时尚零售商
2020/02/20 全球购物
SQL里面如何插入自动增长序列号字段
2012/03/29 面试题
平面设计的岗位职责
2013/11/08 职场文书
幼儿园保育员辞职信
2014/01/12 职场文书
高中教师考核方案
2014/05/18 职场文书
2014年护士个人工作总结
2014/11/11 职场文书
环卫工人慰问信
2015/02/15 职场文书
2016最新离婚协议书范本及程序
2016/03/18 职场文书