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 相关文章推荐
Linux下进行MYSQL编程时插入中文乱码的解决方案
Mar 15 PHP
介绍一些PHP判断变量的函数
Apr 24 PHP
smarty模板中拼接字符串的方法
Feb 14 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
PHP类中的魔术方法(Magic Method)简明总结
Jul 08 PHP
微信公众平台开发之天气预报功能
Aug 31 PHP
PHPExcel 修改已存在Excel的方法
May 03 PHP
thinkPHP5框架中widget的功能与用法详解
Jun 11 PHP
PHP等比例压缩图片的实例代码
Jul 26 PHP
PHP正则判断一个变量是否为正整数的方法
Feb 27 PHP
Laravel5.0+框架邮件发送功能实现方法图文与实例详解
Apr 23 PHP
关于Yii2框架跑脚本时内存泄漏问题的分析与解决
Dec 01 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调用QQ互联接口实现QQ登录网站功能示例
2019/10/24 PHP
JavaScript 中的事件教程
2007/04/05 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
用jquery实现输入框获取焦点消失文字
2013/04/27 Javascript
js对象转json数组的简单实现案例
2014/02/28 Javascript
js实现从中间开始往上下展开网页窗口的方法
2015/03/02 Javascript
浅析Node.js的Stream模块中的Readable对象
2015/07/29 Javascript
jQuery获取cookie值及删除cookie用法实例
2016/04/15 Javascript
分享jQuery网页元素拖拽插件
2020/12/01 Javascript
jQuery自制提示框tooltip改进版
2016/08/01 Javascript
JS实现禁止鼠标右键的功能
2016/10/15 Javascript
JS简单实现点击按钮或文字显示遮罩层的方法
2017/04/27 Javascript
浅析Node.js非对称加密方法
2018/01/29 Javascript
vue2.0路由切换后页面滚动位置不变BUG的解决方法
2018/03/14 Javascript
详解vue-cli项目开发/生产环境代理实现跨域请求
2019/07/23 Javascript
jquery实现点击弹出对话框
2020/02/08 jQuery
探索浏览器页面关闭window.close()的使用详解
2020/08/21 Javascript
如何使用七牛Python SDK写一个同步脚本及使用教程
2015/08/23 Python
Python Socket实现简单TCP Server/client功能示例
2017/08/05 Python
CentOS7.3编译安装Python3.6.2的方法
2018/01/22 Python
Python cookbook(数据结构与算法)找到最大或最小的N个元素实现方法示例
2018/02/13 Python
python如何实现内容写在图片上
2018/03/23 Python
详解Python中的动态属性和特性
2018/04/07 Python
python绘制地震散点图
2019/06/18 Python
Django+RestFramework API接口及接口文档并返回json数据操作
2020/07/12 Python
Vichy薇姿加拿大官网:法国药妆,全球专业敏感肌护肤领先品牌
2018/07/11 全球购物
智能家居、吸尘器、滑板车、电动自行车网上购物:Geekmaxi
2021/01/18 全球购物
大学毕业生通用自荐信范文
2013/10/31 职场文书
品管员岗位职责
2013/11/10 职场文书
职专应届生求职信
2013/11/16 职场文书
户外用品商店创业计划书
2014/01/29 职场文书
三好学生演讲稿范文
2014/04/26 职场文书
学校端午节活动方案
2014/08/23 职场文书
七夕情人节问候语
2015/11/11 职场文书
送给自己的励志语句:要安静的优秀,悄无声息的坚强
2019/11/26 职场文书
golang 实现对Map进行键值自定义排序
2021/04/28 Golang