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 相关文章推荐
APMServ使用说明
Oct 23 PHP
在Windows系统上安装PHP运行环境文字教程
Jul 19 PHP
php+ajax实现图片文件上传功能实例
Jun 17 PHP
php运行提示:Fatal error Allowed memory size内存不足的解决方法
Dec 17 PHP
PHP中浮点数计算比较及取整不准确的解决方法
Jan 09 PHP
php实现在多维数组中查找特定value的方法
Jul 29 PHP
一个简单的php路由类
May 29 PHP
OAuth认证协议中的HMACSHA1加密算法(实例)
Oct 25 PHP
PHP使用mongoclient简单操作mongodb数据库示例
Feb 08 PHP
Laravel框架Eloquent ORM删除数据操作示例
Dec 03 PHP
2020最新版 PhpStudy V8.1版本下载安装使用详解
Oct 30 PHP
PhpStorm 2020.3:新增开箱即用的PHP 8属性(推荐)
Oct 30 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与javascript的两种交互方式
2006/10/09 PHP
php 操作符与控制结构
2012/03/07 PHP
PHP使用CURL模拟登录的方法
2015/07/08 PHP
深入解析PHP的Yii框架中的event事件机制
2016/03/17 PHP
Laravel中间件实现原理详解
2016/10/09 PHP
PHP实现用户异地登录提醒功能的方法【基于thinkPHP框架】
2018/03/15 PHP
总结PHP代码规范、流程规范、git规范
2018/06/18 PHP
jquery 清空file域示例(兼容个浏览器)
2013/10/11 Javascript
js验证整数加保留小数点的简单实例
2013/12/02 Javascript
jQuery源码解读之addClass()方法分析
2015/02/20 Javascript
在Mac OS上安装使用Node.js的项目自动化构建工具Gulp
2016/06/18 Javascript
详解javascript事件绑定使用方法
2016/10/20 Javascript
微信小程序  audio音频播放详解及实例
2016/11/02 Javascript
整理一下常见的IE错误
2016/11/18 Javascript
js实时获取窗口大小变化的实例代码
2016/11/18 Javascript
canvas实现爱心和彩虹雨效果
2017/03/09 Javascript
基于vue2.0+vuex的日期选择组件功能实现
2017/03/13 Javascript
Mac系统下Webstorm快捷键整理大全
2017/05/28 Javascript
分析JS中this引发的bug
2017/12/12 Javascript
element-ui 表格数据时间格式化的方法
2018/08/24 Javascript
100行代码实现一个vue分页组功能
2018/11/06 Javascript
微信小程序下拉菜单效果的实例代码
2019/05/14 Javascript
vue以组件或者插件的形式实现throttle或者debounce
2019/05/22 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
2019/05/26 Javascript
vue学习笔记之过滤器的基本使用方法实例分析
2020/02/01 Javascript
element-ui点击查看大图的方法示例
2020/12/14 Javascript
[01:38]完美世界DOTA2联赛(PWL)宣传片:第一站
2020/10/26 DOTA
教你安装python Django(图文)
2013/11/04 Python
一文带你了解Python 四种常见基础爬虫方法介绍
2020/12/04 Python
Gerry Weber德国官网:优质女性时装,德国最大的时装公司之一
2019/11/02 全球购物
介绍一下UNIX启动过程
2013/11/14 面试题
计算机本科生自荐信
2013/10/15 职场文书
皮肤科医师岗位职责
2013/12/04 职场文书
巾帼标兵事迹材料
2014/12/26 职场文书
Java图书管理系统,课程设计必用(源码+文档)
2021/06/30 Java/Android
详解Nginx的超时keeplive_timeout配置步骤
2022/05/25 Servers