当前位置:首页 > PHP教程 > php应用 > 列表

php实现ip白名单黑名单功能

发布:smiling 来源: PHP粉丝网  添加日期:2021-05-16 10:54:34 浏览: 评论:0 

本文给大家分享了2个php用于实现黑白名单的实用函数,分别是安全IP检测函数和获取客户端IP函数,注释里解释的非常清楚,这里我就不多废话了。

这个是一个检测ip是否非法的php函数,适应于白名单,黑名单功能开发,主要场景应用于:api来源限制,访问限制等,代码如下:

  1. /** 
  2.  * 安全IP检测,支持IP段检测 
  3.  * @param string $ip 要检测的IP 
  4.  * @param string|array $ips  白名单IP或者黑名单IP 
  5.  * @return boolean true 在白名单或者黑名单中,否则不在 
  6.  */ 
  7. function is_safe_ip($ip="",$ips=""){ 
  8.     if(!$ip$ip = get_client_ip();  //获取客户端IP 
  9.     if($ips){ 
  10.         if(is_string($ips)){ //ip用"," 例如白名单IP:192.168.1.13,123.23.23.44,193.134.*.* 
  11.             $ips = explode(","$ips); 
  12.         } 
  13.     }else//读取后台配置 白名单IP 
  14.         $obj = new Setting(); 
  15.         $ips = explode(","$obj->getConfig("whiteip"));  
  16.     } 
  17.     if(in_array($ip$ips)){ 
  18.         return true; 
  19.     } 
  20.     $ipregexp = implode('|'str_replacearray('*','.'), array('\d+','\.') ,$ips));  
  21.     $rs = preg_match("/^(".$ipregexp.")$/"$ip);  
  22.     if($rsreturn true; 
  23.     return ; 

获取ip地址,这里引用thinkphp内置函数,代码如下:

  1. //应网友要求,贴出 get_client_ip() 函数 
  2. /** 
  3.  * 获取客户端IP地址 
  4.  * @param integer $type 返回类型 0 返回IP地址 1 返回IPV4地址数字 
  5.  * @param boolean $adv 是否进行高级模式获取(有可能被伪装) 
  6.  * @return mixed 
  7.  */ 
  8. function get_client_ip($type = 0,$adv=false) { 
  9.     $type       =  $type ? 1 : 0; 
  10.     static $ip  =   NULL; 
  11.     if ($ip !== NULL) return $ip[$type]; 
  12.     if($adv){ 
  13.         if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) { 
  14.             $arr    =   explode(','$_SERVER['HTTP_X_FORWARDED_FOR']); 
  15.             $pos    =   array_search('unknown',$arr); 
  16.             if(false !== $pos) unset($arr[$pos]); 
  17.             $ip     =   trim($arr[0]); 
  18.         }elseif (isset($_SERVER['HTTP_CLIENT_IP'])) { 
  19.             $ip     =   $_SERVER['HTTP_CLIENT_IP']; 
  20.         }elseif (isset($_SERVER['REMOTE_ADDR'])) { 
  21.             $ip     =   $_SERVER['REMOTE_ADDR']; 
  22.         } 
  23.     }elseif (isset($_SERVER['REMOTE_ADDR'])) { 
  24.         $ip     =   $_SERVER['REMOTE_ADDR']; 
  25.     } 
  26.     // IP地址合法验证 
  27.     $long = sprintf("%u",ip2long($ip)); 
  28.     $ip   = $long ? array($ip$long) : array('0.0.0.0', 0); 
  29.     return $ip[$type]; 

以上就是本文的全部内容了,希望对大家理解php检测IP有所帮助。

Tags: ip白名单 ip黑名单

分享到: