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 相关文章推荐
PHP5.2下chunk_split()函数整数溢出漏洞 分析
Jun 06 PHP
Smarty安装配置方法
Apr 10 PHP
php实现mysql同步的实现方法
Oct 21 PHP
用PHP将数据导入到Foxmail的实现代码
Sep 05 PHP
PHP中extract()函数的妙用分析
Jul 11 PHP
mac下安装nginx和php
Nov 04 PHP
phpmailer发送邮件之后,返回收件人是否阅读了邮件的方法
Jul 19 PHP
smarty模板引擎从配置文件中获取数据的方法
Jan 22 PHP
php使用正则验证中文
Apr 06 PHP
详解laravel安装使用Passport(Api认证)
Jul 27 PHP
在PHP中实现使用Guzzle执行POST和GET请求
Oct 15 PHP
Laravel使用swoole实现websocket主动消息推送的方法介绍
Oct 20 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
为什么《星际争霸》是测试人工智能的理想战场
2019/12/03 星际争霸
批量去除PHP文件中bom的PHP代码
2012/03/13 PHP
php学习笔记之基础知识
2014/11/08 PHP
smarty模板引擎从配置文件中获取数据的方法
2015/01/22 PHP
PHP判断JSON对象是否存在的方法(推荐)
2016/07/06 PHP
PHP二维数组矩形转置实例
2016/07/20 PHP
php魔法函数与魔法常量使用介绍
2017/07/23 PHP
php实现和c#一致的DES加密解密实例
2017/07/24 PHP
jQuery+CSS 实现的超Sexy下拉菜单
2010/01/17 Javascript
JavaScript中判断函数是new还是()调用的区别说明
2011/04/07 Javascript
window.event快达到全浏览器支持了,以后使用就方便了
2011/11/30 Javascript
20个最新的jQuery插件
2012/01/13 Javascript
Javascript实现单张图片浏览
2014/12/18 Javascript
js提示框替代系统alert,自动关闭alert对话框的实现方法
2016/11/07 Javascript
jQuery插件HighCharts绘制2D带有Legend的饼图效果示例【附demo源码下载】
2017/03/10 Javascript
详解angular中的作用域及继承
2017/05/31 Javascript
Angularjs使用过滤器完成排序功能
2017/09/20 Javascript
JS返回顶部实例代码
2020/08/09 Javascript
浅谈vuejs实现数据驱动视图原理
2018/02/23 Javascript
Vue设置长时间未操作登录自动到期返回登录页
2020/01/22 Javascript
Python迭代器和生成器介绍
2015/03/06 Python
python快速建立超简单的web服务器的实现方法
2018/02/17 Python
解决matplotlib库show()方法不显示图片的问题
2018/05/24 Python
python脚本实现验证码识别
2018/06/07 Python
Python实现读取SQLServer数据并插入到MongoDB数据库的方法示例
2018/06/09 Python
python中将正则过滤的内容输出写入到文件中的实例
2018/10/21 Python
django 快速启动数据库客户端程序的方法示例
2019/08/16 Python
python 一篇文章搞懂装饰器所有用法(建议收藏)
2019/08/23 Python
python识别文字(基于tesseract)代码实例
2019/08/24 Python
美国Curacao百货连锁店网站:iCuracao.com
2019/07/20 全球购物
航海技术专业毕业生推荐信
2014/07/09 职场文书
公务员考察材料
2014/12/23 职场文书
护士医德医风心得体会
2016/01/25 职场文书
《雷雨》教学反思
2016/02/20 职场文书
WINDOWS 64位 下安装配置mysql8.0.25最详细的教程
2022/03/22 MySQL
微信小程序实现轮播图指示器
2022/06/25 Javascript