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面向对象编程快速入门
Dec 14 PHP
不错的PHP学习之php4与php5之间会穿梭一点点感悟
May 03 PHP
PHP中怎样保持SESSION不过期 原理及方案介绍
Aug 08 PHP
php设计模式之命令模式使用示例
Mar 02 PHP
CI使用Tank Auth转移数据库导致密码用户错误的解决办法
Jun 12 PHP
分享ThinkPHP3.2中关联查询解决思路
Sep 20 PHP
PHP简单读取PDF页数的实现方法
Jul 21 PHP
关于Laravel Route重定向的一个注意点
Jan 16 PHP
PHP数组式访问接口ArrayAccess用法分析
Dec 28 PHP
laravel 解决crontab不执行的问题
Oct 22 PHP
php使用goto实现自动重启swoole、reactphp、workerman服务的代码
Apr 13 PHP
PHP rsa加密解密算法原理解析
Dec 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中将ip地址转成十进制数的两种实用方法
2013/08/15 PHP
php环境无法上传文件的解决方法
2014/04/30 PHP
Laravel5.1自定义500错误页面示例
2016/10/09 PHP
PHP数组遍历的几种常见方式总结
2019/02/15 PHP
document.compatMode介绍
2009/05/21 Javascript
Jquery 扩展方法
2010/05/06 Javascript
详解JavaScript中undefined与null的区别
2014/03/29 Javascript
Node.js 条形码识别程序构建思路详解
2016/02/14 Javascript
js仿百度登录页实现拖动窗口效果
2016/03/11 Javascript
JS表格组件神器bootstrap table详解(强化版)
2016/05/26 Javascript
Swiper实现轮播图效果
2017/07/03 Javascript
jquery实现图片跟随鼠标的实例
2017/10/17 jQuery
vue兄弟组件传递数据的实例
2018/09/06 Javascript
Vue-cli3多页面配置详解
2020/03/22 Javascript
深入浅析vue全局环境变量和模式
2020/04/28 Javascript
工作中常用js功能汇总
2020/11/07 Javascript
Vue如何实现验证码输入交互
2020/12/07 Vue.js
python使用socket连接远程服务器的方法
2015/04/29 Python
python常见的格式化输出小结
2016/12/15 Python
用python找出那些被“标记”的照片
2017/04/20 Python
Python单元测试实例详解
2018/05/25 Python
PyQt 图解Qt Designer工具的使用方法
2019/08/06 Python
python 矢量数据转栅格数据代码实例
2019/09/30 Python
Python调用C语言程序方法解析
2020/07/07 Python
关于python tushare Tkinter构建的简单股票可视化查询系统(Beta v0.13)
2020/10/19 Python
Python读写csv文件流程及异常解决
2020/10/20 Python
python3代码中实现加法重载的实例
2020/12/03 Python
Pandas直接读取sql脚本的方法
2021/01/21 Python
Philosophy美国官网:美国美容品牌
2016/08/15 全球购物
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
JSF如何进行表格处理及取值
2012/08/06 面试题
党员培训思想汇报
2014/01/07 职场文书
党支部公开承诺书
2014/03/28 职场文书
2014统计局民主生活会对照检查材料思想汇报
2014/10/02 职场文书
信访工作汇报材料
2014/10/27 职场文书
详解Java线程池是如何重复利用空闲线程的
2021/06/26 Java/Android