2009-08-09 94 views
2

如何从IP地址获得/ 22网络地址?PHP IP到网络转换

像:

/24 of 193.95.221.54 is 193.95.221.0 
/16 of 193.95.221.54 is 193.95.0.0 
/8 of 193.95.221.54 is 193.0.0.0 
/22 of 193.95.221.54 is 193.95.X.0 

我想缓存GeoIP的数据,1024个的IP地址与单个缓存项,以节省查找的缓存空间和数量(GeoIP的数据库是25 MB)。

回答

7

您可以使用此功能,

<?php 

function to_netmask($ip, $prefix) { 
    $mask = $prefix==0?0:0xffffffff << (32 - $prefix); 
    return long2ip(ip2long($ip) & $mask); 
} 

?> 
3
long2ip(ip2long($addr) & 0xf00) 

其中0xf00是你想要考虑的位的整数,例如, 0xffffff00' for/24 , '0xffff0000/16