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 相关文章推荐
IIS7.X配置PHP运行环境小结
Jun 09 PHP
PHP 简易输出CSV表格文件的方法详解
Jun 20 PHP
如何使用PHP获取指定日期所在月的开始日期与结束日期
Aug 01 PHP
PHP验证码函数代码(简单实用)
Sep 29 PHP
几道坑人的PHP面试题 试试看看你会不会也中招
Aug 19 PHP
smarty模板引擎之分配数据类型
Mar 30 PHP
PHP中preg_match函数正则匹配的字符串长度问题
May 27 PHP
PHP的Laravel框架中使用AdminLTE模板来编写网站后台界面
Mar 21 PHP
php实现异步将远程链接上内容(图片或内容)写到本地的方法
Nov 30 PHP
PHP实现根据数组的值进行分组的方法
Apr 20 PHP
YII框架http缓存操作示例
Apr 29 PHP
通过PHP实现获取访问用户IP
May 09 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
PHP验证码类代码( 最新修改,完全定制化! )
2010/12/02 PHP
php实现高效获取图片尺寸的方法
2014/12/12 PHP
详解WordPress中简码格式标签编写的基本方法
2015/12/22 PHP
laravel 5.3中自定义加密服务的方案详解
2017/05/09 PHP
JavaScript 数组的 uniq 方法
2008/01/23 Javascript
基于JQuery的cookie插件
2010/04/07 Javascript
JavaScript 类型的包装对象(Typed Wrappers)
2011/10/27 Javascript
javascript 三种方法实现获得和设置以及移除元素属性
2013/03/20 Javascript
js实现字符串的16进制编码不加密
2014/04/25 Javascript
Javascript玩转继承(一)
2014/05/08 Javascript
JavaScript中window.showModalDialog()用法详解
2014/12/18 Javascript
jQuery创建自定义的选择器用以选择高度大于100的超链接实例
2015/03/18 Javascript
js图片跟随鼠标移动代码
2015/11/26 Javascript
如何利用模板将HTML从JavaScript中抽离
2016/10/08 Javascript
JavaScript 自定义事件之我见
2017/09/25 Javascript
Javascript Promise用法详解
2018/05/10 Javascript
ES2020系列之空值合并运算符 '??'
2020/07/22 Javascript
vue 公共列表选择组件,引用Vant-UI的样式方式
2020/11/02 Javascript
JavaScript 判断浏览器是否是IE
2021/02/19 Javascript
vue项目配置 webpack-obfuscator 进行代码加密混淆的实现
2021/02/26 Vue.js
python查找指定具有相同内容文件的方法
2015/06/28 Python
Python判断以什么结尾以什么开头的实例
2018/10/27 Python
Python中的取模运算方法
2018/11/10 Python
python实现键盘输入的实操方法
2019/07/16 Python
Python 操作 PostgreSQL 数据库示例【连接、增删改查等】
2020/04/21 Python
《爱如茉莉》教后反思
2014/04/12 职场文书
小学五年级学生评语
2014/04/22 职场文书
小学竞选班干部演讲稿
2014/08/20 职场文书
中学生运动会通讯稿大全
2014/09/18 职场文书
2014院党委领导班子对照检查材料思想汇报
2014/09/24 职场文书
防汛通知
2015/04/25 职场文书
首席执行官观后感
2015/06/03 职场文书
导游词之安徽巢湖
2019/12/26 职场文书
Python if else条件语句形式详解
2022/03/24 Python
详解Alibaba Java诊断工具Arthas查看Dubbo动态代理类
2022/04/08 Java/Android
Python写情书? 10行代码展示如何把情书写在她的照片里
2022/04/21 Python