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中文汉字验证码
Apr 08 PHP
phpinfo 系统查看参数函数代码
Jun 05 PHP
PHP header函数分析详解
Aug 06 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
php数组保存文本与文本反编成数组实例
Nov 13 PHP
php找出指定范围内回文数且平方根也是回文数的方法
Mar 23 PHP
php循环table实现一行两列显示的方法
Jun 04 PHP
详解PHP的Yii框架中扩展的安装与使用
Apr 01 PHP
PHP中抽象类和抽象方法概念与用法分析
May 24 PHP
php实现博客,论坛图片防盗链的方法
Oct 15 PHP
Centos7 Yum安装PHP7.2流程教程详解
Jul 02 PHP
Laravel如何实现自动加载类
Oct 14 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
我的论坛源代码(五)
2006/10/09 PHP
PHP的AES加密算法完整实例
2016/07/20 PHP
关于laravel 日志写入失败问题汇总
2019/10/17 PHP
PHP语言对接抖音快手小红书视频/图片去水印API接口源码
2020/08/11 PHP
Aster vs KG BO3 第二场2.19
2021/03/10 DOTA
学习ExtJS Panel常用方法
2009/10/07 Javascript
用js实现判断当前网址的来路如果不是指定的来路就跳转到指定页面
2011/05/02 Javascript
易操作的jQuery表单提示插件
2015/12/01 Javascript
JS判断是否为JSON对象及是否存在某字段的方法(推荐)
2016/11/29 Javascript
实现两个文本框同时输入的实例
2017/09/25 Javascript
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
js实现input密码框显示/隐藏功能
2020/09/10 Javascript
vue获取验证码倒计时组件
2019/08/26 Javascript
es6中使用map简化复杂条件判断操作实例详解
2020/02/19 Javascript
详解vuejs中执行npm run dev出现页面cannot GET/问题
2020/04/26 Javascript
基于vue+echarts数据可视化大屏展示的实现
2020/12/25 Vue.js
Python设计模式之代理模式实例
2014/04/26 Python
Python批量修改文本文件内容的方法
2016/04/29 Python
python实现秒杀商品的微信自动提醒功能(代码详解)
2020/04/27 Python
pytorch 计算ConvTranspose1d输出特征大小方式
2020/06/23 Python
Python selenium环境搭建实现过程解析
2020/09/08 Python
Python浮点型(float)运算结果不正确的解决方案
2020/09/22 Python
CSS3 实现发光边框特效
2020/11/11 HTML / CSS
eBay爱尔兰站:eBay.ie
2019/08/09 全球购物
美国优质马术服装购买网站:Breeches.com
2019/12/16 全球购物
面向对象设计的原则是什么
2013/02/13 面试题
新闻网站实习自我鉴定
2013/09/25 职场文书
法律系毕业生求职信
2014/05/28 职场文书
日语系毕业求职信
2014/07/27 职场文书
公务员中国梦演讲稿
2014/08/19 职场文书
少先队活动总结
2014/08/29 职场文书
党员对十八届四中全会的期盼思想汇报范文
2014/10/17 职场文书
自查自纠整改报告
2014/11/06 职场文书
我的暑假生活作文(五年级)范文
2019/08/07 职场文书
为什么你写的height:100%不起作用
2021/05/10 HTML / CSS
使用RedisTemplat实现简单的分布式锁
2021/11/20 Redis