本文实例讲述了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程序设计有所帮助。