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 相关文章推荐
使用phpQuery采集网页的方法
Nov 13 PHP
php使用qr生成二维码的示例分享
Jan 20 PHP
访问编码后的中文URL返回404错误的解决方法
Aug 20 PHP
详谈PHP文件目录基础操作
Nov 11 PHP
php启用sphinx全文搜索的实现方法
Dec 24 PHP
typecho插件编写教程(五):核心代码
May 28 PHP
thinkPHP使用post方式查询时分页失效的解决方法
Dec 09 PHP
PHP编写RESTful接口
Feb 23 PHP
thinkPHP订单数字提醒功能的实现方法
Dec 01 PHP
PHP根据树的前序遍历和中序遍历构造树并输出后序遍历的方法
Nov 10 PHP
PHP操作MongoDB实现增删改查功能【附php7操作MongoDB方法】
Apr 24 PHP
Laravel中如何轻松容易的输出完整的SQL语句
Jul 26 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 fsockopen中多线程问题的解决办法[翻译]
2011/11/09 PHP
关于使用key/value数据库redis和TTSERVER的心得体会
2013/06/28 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
Yii中使用PHPExcel导出Excel的方法
2014/12/26 PHP
PHP 实现的将图片转换为TXT
2015/10/21 PHP
javascript Zifa FormValid 0.1表单验证 代码打包下载
2007/06/08 Javascript
js中cookie的使用详细分析
2008/05/28 Javascript
flash调用js中的方法,让js传递变量给flash的办法及思路
2013/08/07 Javascript
jQuery向后台传入json格式数据的方法
2015/02/13 Javascript
对javascript继承的理解
2016/10/11 Javascript
layer实现弹窗提交信息
2016/12/12 Javascript
浅谈javascript的url参数parse和build函数
2017/03/04 Javascript
JS模拟实现ECMAScript5新增的数组方法
2017/03/20 Javascript
Vue.js tab实现选项卡切换
2017/05/16 Javascript
javascript和php使用ajax通信传递JSON的实例
2018/08/21 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
JS查找孩子节点简单示例
2019/07/25 Javascript
详解Vue中CSS样式穿透问题
2019/09/12 Javascript
vue中利用three.js实现全景图的完整示例
2020/12/07 Vue.js
Python爬取读者并制作成PDF
2015/03/10 Python
安装Python和pygame及相应的环境变量配置(图文教程)
2017/06/04 Python
让Django支持Sql Server作后端数据库的方法
2018/05/29 Python
Django 后台获取文件列表 InMemoryUploadedFile的例子
2019/08/07 Python
Django框架创建项目的方法入门教程
2019/11/04 Python
世界知名接发和假发品牌:Poze Hair
2017/03/08 全球购物
英国天然保健品网站:Simply Supplements
2017/03/22 全球购物
玉兰油美国官网:OLAY美国
2018/10/25 全球购物
Huda Beauty官方商店:化妆和美容产品
2020/09/05 全球购物
工作自荐信
2013/12/11 职场文书
大学生职业规划前言模板
2013/12/27 职场文书
ktv好的活动方案
2014/08/15 职场文书
亮剑观后感300字
2015/06/05 职场文书
小学安全教育主题班会
2015/08/12 职场文书
使用vue-element-admin框架从后端动态获取菜单功能的实现
2021/04/29 Vue.js
python geopandas读取、创建shapefile文件的方法
2021/06/29 Python
关于使用Redisson订阅数问题
2022/01/18 Redis