本文实例讲述了php进行ip地址掩码运算处理的方法。分享给大家供大家参考,具体如下:
ip解析:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
function ip_parse( $ip_str ) { $mark_len = 32; if ( strpos ( $ip_str , "/" ) > 0) { list( $ip_str , $mark_len ) = explode ( "/" , $ip_str ); } $ip = ip2long ( $ip_str ); $mark = 0xFFFFFFFF << (32 - $mark_len ) & 0xFFFFFFFF; $ip_start = $ip & $mark ; $ip_end = $ip | (~ $mark ) & 0xFFFFFFFF; return array ( $ip , $mark , $ip_start , $ip_end ); } //演示: list( $ip , $mark , $ip_start , $ip_end ) = ip_parse( "192.168.1.12/24" ); echo "IP地址 : " , long2ip( $ip ), "\n" ; echo "子网掩码: " , long2ip( $mark ), "\n" ; echo "IP段开始: " , long2ip( $ip_start ), "\n" ; echo "IP段结束: " , long2ip( $ip_end ), "\n" ; |
结果:
1
2
3
4
|
IP地址 : 192.168.1.12 子网掩码: 255.255.255.0 IP段开始: 192.168.1.0 IP段结束: 192.168.1.255 |
ip是否在ip分段中:
1
2
3
4
5
6
7
8
9
10
|
function ip_in( $ip , $ip_str ) { $mark_len = 32; if ( strpos ( $ip_str , "/" ) > 0) { list( $ip_str , $mark_len ) = explode ( "/" , $ip_str ); } $right_len = 32 - $mark_len ; return ip2long ( $ip ) >> $right_len == ip2long ( $ip_str ) >> $right_len ; } //演示: var_dump(ip_in( "192.168.1.1" , "192.168.1.0/24" )); |
希望本文所述对大家PHP程序设计有所帮助。