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 相关文章推荐
phpinfo 系统查看参数函数代码
Jun 05 PHP
微信公众平台之快递查询功能用法实例
Apr 14 PHP
php用户密码加密算法分析【Discuz加密算法】
Oct 12 PHP
php使用正则表达式获取字符串中的URL
Dec 29 PHP
PHP基于Redis消息队列实现发布微博的方法
May 03 PHP
PHP删除二维数组中相同元素及数组重复值的方法示例
May 05 PHP
PHP基于SimpleXML生成和解析xml的方法示例
Jul 17 PHP
yii2.0整合阿里云oss删除单个文件的方法
Sep 19 PHP
PHP面向对象五大原则之开放-封闭原则(OCP)详解
Apr 04 PHP
PHP从零开始打造自己的MVC框架之类的自动加载实现方法详解
Jun 03 PHP
Laravel 模型使用软删除-左连接查询-表起别名示例
Oct 24 PHP
YII2框架中behavior行为的理解与使用方法示例
Mar 13 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编程最快明白(第一讲 软件环境和准备工作)
2010/10/25 PHP
PHP include_path设置技巧分享
2011/07/03 PHP
thinkPHP的Html模板标签使用方法
2012/11/13 PHP
使用php清除bom示例
2014/03/03 PHP
php实现数组筛选奇数和偶数示例
2014/04/11 PHP
在WordPress中实现发送http请求的相关函数解析
2015/12/29 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
用Javascript 获取页面元素的位置的代码
2009/09/25 Javascript
js日期对象兼容性的处理方法
2014/01/28 Javascript
javascript读写json示例
2014/04/11 Javascript
jquery不常用方法汇总
2015/07/26 Javascript
每天一篇javascript学习小结(Array数组)
2015/11/11 Javascript
JavaScript中对象的不同创建方法
2016/08/12 Javascript
js模拟微博发布消息
2017/02/23 Javascript
ui-router中使用ocLazyLoad和resolve的具体方法
2017/10/18 Javascript
Vue.js 中取得后台原生HTML字符串 原样显示问题的解决方法
2018/06/10 Javascript
Vue-router 切换组件页面时进入进出动画方法
2018/09/01 Javascript
Angular事件之不同组件间传递数据的方法
2018/11/15 Javascript
利用jquery和BootStrap实现动态滚动条效果
2018/12/03 jQuery
python中文乱码不着急,先看懂字节和字符
2017/12/20 Python
pytorch + visdom CNN处理自建图片数据集的方法
2018/06/04 Python
Python中dict和set的用法讲解
2019/03/28 Python
Python控制Firefox方法总结
2019/06/03 Python
Python列表的切片实例讲解
2019/08/20 Python
python基于K-means聚类算法的图像分割
2019/10/30 Python
Python中求对数方法总结
2020/03/10 Python
浅析CSS3中鲜为人知的属性:-webkit-tap-highlight-color
2017/01/12 HTML / CSS
css3 column实现卡片瀑布流布局的示例代码
2018/06/22 HTML / CSS
移动端HTML5开发神器之vconsole详解
2020/12/15 HTML / CSS
爱尔兰家电数码商城:Currys PC World爱尔兰
2016/07/23 全球购物
医学毕业生自荐信
2013/10/11 职场文书
人事专员岗位职责说明书
2014/07/30 职场文书
2014年组织部工作总结
2014/11/14 职场文书
2015年重阳节慰问信
2015/03/23 职场文书
《揠苗助长》教学反思
2016/02/20 职场文书
Apache Linkis 中间件架构及快速安装步骤
2022/03/16 Servers