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创建多级目录代码
Jun 05 PHP
用php过滤危险html代码的函数
Jul 22 PHP
php 生成饼图 三维饼图
Sep 28 PHP
openflashchart 2.0 简单案例php版
May 21 PHP
基于PHP导出Excel的小经验 完美解决乱码问题
Jun 10 PHP
解析PHP高效率写法(详解原因)
Jun 20 PHP
PHP上传文件时文件过大$_FILES为空的解决方法
Nov 26 PHP
PHP中使用asort进行中文排序失效的问题处理
Aug 18 PHP
PHP json_encode() 函数详解及中文乱码问题
Nov 05 PHP
完美解决thinkphp唯一索引重复时出错的问题
Mar 31 PHP
php实现微信支付之现金红包
May 30 PHP
php中钩子(hook)的原理与简单应用demo示例
Sep 03 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读取XML值的代码(推荐)
2011/01/01 PHP
一个PHP并发访问实例代码
2012/09/06 PHP
php实现PDO中捕获SQL语句错误的方法
2017/02/16 PHP
php ajax数据传输和响应方法
2018/08/21 PHP
使用composer安装使用thinkphp6.0框架问题【视频教程】
2019/10/01 PHP
JavaScript 应用技巧集合[推荐]
2009/08/30 Javascript
ExtJs纵坐标值重复问题的解决方法
2014/02/27 Javascript
jQuery前端分页示例分享
2015/02/10 Javascript
jQuery实现输入框下拉列表树插件特效代码分享
2015/08/27 Javascript
javascript插件开发的一些感想和心得
2016/02/28 Javascript
node.js报错:Cannot find module 'ejs'的解决办法
2016/12/14 Javascript
JavaScript通过filereader接口读取文件
2017/05/10 Javascript
PHP7新特性简述
2017/06/11 Javascript
Vue.directive 自定义指令的问题小结
2018/03/04 Javascript
详解Angular5路由传值方式及其相关问题
2018/04/28 Javascript
Vue Element校验validate的实例
2020/09/21 Javascript
[50:20]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第四局
2016/03/06 DOTA
python中 ? : 三元表达式的使用介绍
2013/10/09 Python
详解Python中open()函数指定文件打开方式的用法
2016/06/04 Python
python实现发送邮件功能代码
2017/12/14 Python
python编写分类决策树的代码
2017/12/21 Python
python conda操作方法
2019/09/11 Python
python 爬取疫情数据的源码
2020/02/09 Python
解决pycharm中opencv-python导入cv2后无法自动补全的问题(不用作任何文件上的修改)
2020/03/05 Python
matplotlib绘制鼠标的十字光标的实现(内置方式)
2021/01/06 Python
python实现MySQL指定表增量同步数据到clickhouse的脚本
2021/02/26 Python
CSS3 animation实现简易幻灯片轮播特效
2016/09/27 HTML / CSS
世界最大的私人旅行指南出版商:孤独星球
2016/08/23 全球购物
Lentiamo比利时:便宜的隐形眼镜
2020/02/14 全球购物
商务日语专业毕业生求职信
2013/10/26 职场文书
厨师长岗位职责
2014/03/02 职场文书
高中班级口号
2014/06/09 职场文书
安全生产一岗双责责任书
2014/07/28 职场文书
学校领导班子对照检查材料
2014/08/28 职场文书
2015年安全教育月活动总结
2015/03/26 职场文书
SqlServer: 如何更改表的文件组?(进而改变存储位置)
2021/04/05 SQL Server