IP与数字相互转换--PHP函数与mysql函数

 

相信很多人会遇到使用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

 

Author: thinkwei

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注