相信很多人会遇到使用IP地址区别相应的地区的问题,首先你需要一个IP地址库,然后进行匹配得出结果。
而地区的IP地址一般都是IP地址段,这里通常的做法就是,将IP地址转为十进制数字,进行循环入库,以做匹配使用。
计算的核心函数:
/*输入IP地址,如192.168.1.88*/ function ipToInt($strIp){ $strIp_arr = explode('.', $strIp); return (intval($strIp_arr[0])<<24)|(intval($strIp_arr[1])<<16)|(intval($strIp_arr[2])<<8)|(intval($strIp_arr[3])); } /*将数字转换为IP地址,如3232235864*/ function intToIp($intIp){ $strIp_arr = array(); $strIp_arr[0] = $intIp>>24; $strIp_arr[1] = ($intIp&0x00FF0000)>>16;//与十六进制的IP地址做 与运算 $strIp_arr[2] = ($intIp&0x0000FF00)>>8; $strIp_arr[3] = $intIp&0x000000FF; return implode('.',$strIp_arr); }
注:
PHP函数有自带的ip2long()、long2ip()两个函数,不过这个转换必须是符合IP的;
使用位运算,可以自定义,比如前三位的IP:192.168.1 -- 192.168.255,只需要稍作修改就可以了。
当然mysql也可以直接实现,mysql的自带函数:inet_aton()、inet_ntoa()分别为IP转数字、数字转IP;
在终端中直接ping 数字IP也是可以ping通的 Y(^_^)Y