IP在线查询位置及转换存储

Yourtion 创作于:2012-05-03     全文约 1170 字, 预计阅读时间为 4 分钟

最近在做一个私密聊天的客户端,顺便研究了一下在线查询IP地理位置,基于新浪IP地址信息数据库共享接口,同时研究了关于IP地址在数据库中转存为数值类型的方法,和大家进行分享,基于PHP实现,大家可以举一反三。

接口地址:http://int.dpool.sina.com.cn/iplookup/iplookup.php?ip=需要查询的ip地址

使用方法(返回Json并解析处理):

$url = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=json&ip=".$ip;
$message = json_decode(file_get_contents($url),true);
if (!empty($message))
{
	return $message['province'].$message['city'].$message['district'].$message['isp'];
}
	else return '未知地点';

其中返回的各个参数可以自己删减显示,

  • [ret] => 1表示正常 -1表示内网,-2表示ip地址输入有误
  • [start] => 地址段起点
  • [end] => 地址段终点
  • [country] => 国家
  • [province] => 省
  • [city] => 是
  • [district] =>
  • [isp] =>
  • [type] => 类型
  • [desc] =>

关于地址的转换和存储就分享两个function

IP转整数:

function iptolong($ip){
	$ip = explode('.',$ip);
	$num = $ip[0]*256*256*256 + $ip[1]*256*256 + $ip[2]*256 + $ip[3] - 256*256*256*256;
	return $num;
}

整数转IP:

function longtoip($num){
	$ip = array();
	$ip[0] = floor($num / 256 / 256 / 256);
	$ip[1] = floor($num / 256 / 256) - $ip[0] *256;
	$ip[2] = floor($num / 256) - $ip[0]*256*256 - $ip[1]*256;
	$ip[3] = $num - $ip[0]*256*256*256 - $ip[1]*256*256 - $ip[2]*256;
	$ip[0] = $num < 0 ? (256+$ip[0]) : $ip[0];
	return implode('.',$ip);
}

原文链接:https://blog.yourtion.com/the-ip-address-areas-and-converter.html