有时候需要判断某个IP是否在某个范围内,对于有划分子网的网络,一眼是很难判断的,需要计算子网起止与结束地址,对于学过CCNA知识的未必会算的清楚。看代码:
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
|
<?php
/**
* 判断IP是否在某个网络内
* 运维生存时间
* site:www.ttlsa.com
* @param $ip
* @param $network
* @return bool
*/
function
ip_in_network
(
$ip
,
$network
)
{
$ip
=
(
double
)
(
sprintf
(
"%u"
,
ip2long
(
$ip
)
)
)
;
$s
=
explode
(
'/'
,
$network
)
;
$network_start
=
(
double
)
(
sprintf
(
"%u"
,
ip2long
(
$s
[
0
]
)
)
)
;
$network_len
=
pow
(
2
,
32
-
$s
[
1
]
)
;
$network_end
=
$network_start
+
$network_len
-
1
;
if
(
$ip
>=
$network_start
&&
$ip
<=
$network_end
)
{
return
true
;
}
return
false
;
}
?>
|
这种方法可以当做一个常用函数来使用。啰嗦一句,对于要把IP地址存入数据库的情况下,强烈建议先用ip2long进行转换后再存入数据库。
如需转载请注明出处:http://www.ttlsa.com/html/2751.html
收 藏
转载请注明:成长的对话 » PHP判断IP是否在某个网络内