PHP版本的IP段验证类

简介:

可以支持段号和星号,支持白名单,黑名单


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
class  IpHelper
{
     /**
      * IP验证
      *
      * 如果地址在黑名单中,返回false;
      * 如果地址不在黑名单但在白名单中,返回true;
      * 如果地址既不在黑名单也不在白名单,视是否是严格模式而定,
      * 如果是严格模式,则当IP不在黑白名单时返回false;反之,返回true
      *
      * @param string $ip 访问IP
      * @param array $valid_list 白名单
      * @param array $invalid_list 黑名单
      * @param boolean $is_strict 是否严格模式
      * @return boolean
      */
     public  static  function  checkIP( $ip $valid_list $invalid_list = array (),  $is_strict =true)
     {
         $ip_segs  explode ( '.' $ip );
         // 先黑后白
         if  (! empty ( $invalid_list ))
         {
             return  self::isInSection( $ip_segs $invalid_list ) ? false : true;
         }
         if  (! empty ( $valid_list ))
         {
             return  self::isInSection( $ip_segs $valid_list );
         }
         return  $is_strict  == true ? false : true;
     }
     /**
      * 判断某个IP是否在某个网段内
      *
      * @param array $ip_segs IP分段数组
      * @param array $section_list 指定IP或IP段列表
      * @return boolean
      */
     public  static  function  isInSection( $ip_segs $ip_list )
     {
         foreach  ( $ip_list  as  $key  =>  $val )
         {
             $ip_str  = self::formatIp( $val );
             if  (! empty ( $ip_str ))
             {
                 $segments  explode ( '.' $ip_str );
                 if  (self::isValidSegment( $ip_segs $segments ))
                 {
                     return  true;
                 }
             }
         }
         return  false;
     }
     /**
      * 格式化IP
      *
      * @param string $ip IP段或IP地址
      * @return mixed
      */
     public  static  function  formatIp( $ip )
     {
         $arr  explode ( '.' $ip );
         $repeat_count  = 4 -  count ( $arr );
         if  ( $repeat_count  < 0)
         {
             return  false;
         }
         $ip  .=  str_repeat ( '.*' $repeat_count ); // 追加成完整格式
         return  str_replace ( '*' '0-255' $ip ); // 把星号转换成标准段
     }
     /**
      * 验证IP是否在合法范围中
      *
      * 依次比较每个IP进行判断,如果全都符合,返回true,有任何不符,返回false
      *
      * @param array $ip_segs IP分段数组
      * @param array $segments 指定IP或IP段分段数组
      * @return boolean
      */
     public  static  function  isValidSegment( $ip_segs $segments )
     {
         foreach  ( $segments  as  $key  =>  $val )
         {
             if  ( strstr ( $val '-' ) !== false)
             {
                 $range  explode ( '-' $val );
                 if  ( $ip_segs [ $key ] < (int) $range [0] ||  $ip_segs [ $key ] > (int) $range [1])
                 {
                     return  false;
                 }
             }
             else
             {
                 if  ((string) $ip_segs [ $key ] != trim( $val ))
                 {
                     return  false;
                 }
             }
         }
         return  true;
     }
}


测试:

1
2
3
4
5
6
7
8
9
10
$ip1  "10.237.1.100" ;
$ip2  "10.237.3.100" ;
$valid_list  array ( "10.237.1-2.*" );
$invalid_list  array ( "10.237.1.100" );
$rs1  = IpHelper::checkIP( $ip1 $valid_list );
$rs2  = IpHelper::checkIP( $ip2 $valid_list );
$rs3  = IpHelper::checkIP( $ip1 $valid_list $invalid_list );
var_dump( $rs1 );
var_dump( $rs2 );
var_dump( $rs3 );

输出结果:


1
2
3
boolean true
boolean false
boolean false









本文转自 ustb80 51CTO博客,原文链接:http://blog.51cto.com/ustb80/1300037,如需转载请自行联系原作者
目录
相关文章
|
1月前
|
Java 程序员 PHP
PHP对象和类
PHP对象和类
21 0
|
3月前
|
PHP Apache
centos7.9 安装php7.0以上版本
centos7.9 安装php7.0以上版本
72 2
|
10天前
|
数据采集 监控 API
使用PHP实现动态代理IP的功能
使用PHP实现动态代理IP的功能
|
12天前
|
安全 编译器 PHP
PHP 8.1版本发布:引领Web开发新潮流
PHP编程语言一直是Web开发的主力军,而最新发布的PHP 8.1版本则为开发者们带来了更多创新和便利。本文将介绍PHP 8.1版本的主要特性,包括更快的性能、新的语言功能和增强的安全性,以及如何利用这些功能来提升Web应用程序的质量和效率。
|
21天前
|
关系型数据库 MySQL Linux
Centos7 yum安装lAMP 环境 php版本5.6.38 mysql版本5.7.22
Centos7 yum安装lAMP 环境 php版本5.6.38 mysql版本5.7.22
19 0