淘宝公司提供了一个很好用的IP地理信息查询接口。
在这里:http://ip.taobao.com/
TaobaoIPQuery2这个类将极大的简化相关的信息查询。

类 TaobaoIPQuery2 文件:

 <?php
/* Usage:
* $IPInfo = TaobaoIPQuery2::getIPInfo('IPAddress'); http://www.cnblogs.com/roucheng/
*/
Class TaobaoIPQuery2{
private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
public static function getIPInfo($ip){
$long = ip2long($ip);
if($long === 0){
throw new Exception('IP address error', 5);
}
$ip=long2ip($long);
$IPInfo = self::queryIPInfo($ip);
return self::parseJSON($IPInfo);
} private static function queryIPInfo($ip){
$query = http_build_query(array('ip'=>$ip));
$ch = curl_init();
$options = array(
CURLOPT_URL => sprintf('%s?%s', self::$_requestURL, $query),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_AUTOREFERER => false,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 3.0,
);
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
curl_close($ch);
return $content;
} private static function parseJSON($json){
$O = json_decode ($json, true);
if(false === is_null($O)){
return $O;
}
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
$errorCode = json_last_error();
if(isset(self::$_JSONParseError[$errorCode])){
throw new Exception(self::$_JSONParseError[$errorCode], 5);
}
}
throw new Exception('JSON parse error', 5);
} private static $_JSONParseError = array(
JSON_ERROR_NONE=>'No error has occurred',
JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',
JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',
JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',
JSON_ERROR_SYNTAX=>'Syntax error',
JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded',
);
}

TaobaoIPQuery2.Class.php:

 <?php
Class TaobaoIPQuery2{
private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
public static function getIPInfo($ip){
$long = ip2long($ip);
if($long === 0){
throw new Exception('IP address error', 5);
}
$ip=long2ip($long);
$IPInfo = self::queryIPInfo($ip);
return self::parseJSON($IPInfo);
} private static function queryIPInfo($ip){
$query = http_build_query(array('ip'=>$ip));
$ch = curl_init();
$options = array(
CURLOPT_URL => sprintf('%s?%s', self::$_requestURL, $query),
CURLOPT_RETURNTRANSFER => true,
CURLOPT_AUTOREFERER => false,
CURLOPT_FOLLOWLOCATION => false,
CURLOPT_HEADER => false,
CURLOPT_TIMEOUT => 3.0,
);
curl_setopt_array($ch, $options);
$content = curl_exec($ch);
curl_close($ch);
return $content;
} private static function parseJSON($json){
$O = json_decode ($json, true);
if(false === is_null($O)){
return $O;
}
if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
$errorCode = json_last_error();
if(isset(self::$_JSONParseError[$errorCode])){
throw new Exception(self::$_JSONParseError[$errorCode], 5);
}
}
throw new Exception('JSON parse error', 5);
}
/* http://www.cnblogs.com/roucheng/ */
private static $_JSONParseError = array(
JSON_ERROR_NONE=>'No error has occurred',
JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',
JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',
JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',
JSON_ERROR_SYNTAX=>'Syntax error',
JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded',
);
}

调用:

$ip = $_SERVER["REMOTE_ADDR"];
$ipquery = new taobaoIPQuery($ip);
$region = $ipquery->get_region();
$country = $ipquery->get_country();
$city = $ipquery->get_city();

另外新浪也提供接口:http://ipapi.sinaapp.com/

php查询IP地址归属等信息的更多相关文章

  1. 查询ip地址归属地

    查询ip地址归属地方法: curl ip.cn/$ip 如果没有返回,试试地址写全: curl https://www.ip.cn/$ip 如:

  2. 手机归属地查询-IP地址查询-身份证查询-域名备案查询--Api接口

    使用这些接口是需要密钥的 公共密钥 appkey: 10003  secret: d1149a30182aa2088ef645309ea193bf  生成后sign: b59bc3ef6191eb9f ...

  3. Python实现IP地址归属地查询

    一.使用淘宝IP地址库查询 使用淘宝的Rest API,可以快速查询IP地址的归属地: 图00-淘宝IP地址库RestAPI使用说明 图01-使用淘宝免费IP地址库-查询IP归属地 存在问题:淘宝的免 ...

  4. 【VB.NET】利用纯真IP数据库查询IP地址及信息

    几年前从某个博客抄来的,已经忘记原地址了,如果需要C#版的,可以在博客园搜到吧.我因为自己用,所以转换为了VBNET代码,而且也放置了很久,今天无意间翻出来,就分享给大家吧. 首先,先下载 纯真数据库 ...

  5. 获取客户端IP地址定位城市信息

    获取客户端IP地址定位城市信息 1.首先获取客户端的IP地址 function getIPaddress(){ $IPaddress=''; if (isset($_SERVER)){ if (iss ...

  6. 获取ip地址及城市信息

    大家好,今天给大家分享的是一个简单的知识获取登录用户的ip地址及城市信息,lz是一个小白,如果有哪些错误的地方  欢迎大家指出 东西很简单,直接上代码 [HttpPost] public string ...

  7. 【VB.NET】通过 IPIP.NET 数据库来查询IP地址

    上一次介绍了利用纯真数据库查询IP地址详细信息的方法.然而纯真数据库是由网友反馈所提供的,很多数据描述并不准确,所以我上网找了一些其他的IP数据库,最后就找到了 ipip.net 这个网站所提供的IP ...

  8. Mac通过域名查询IP地址

    Mac通过域名查询IP地址 方法一:使用Mac自带的"网络实用工具" 步骤: 搜索"网络使用工具",并打开: 点击LookUp,输入互联网地址,点击Lookup ...

  9. 在windows系统和linux系统中查询IP地址命令的不同

    在linux和windows系统上查询IP地址的命令是不一样的.         在linux中的命令行模式下,输入ifconfig即可查询到IP.而在windows系统下要查询IP地址需要先打开do ...

随机推荐

  1. OGG-01232 Receive TCP params error: TCP/IP error 104 (Connection reset by peer), endpoint:

    源端: 2015-02-05 17:45:49 INFO OGG-01815 Virtual Memory Facilities for: COM anon alloc: mmap(MAP_ANON) ...

  2. 【C#】取得并改变图像解析度

    , , bmpOrg.Width, bmpOrg.Height);       g.Dispose();       // 画像を保存       string dirName = Path.GetD ...

  3. Https 公钥、私钥、证书

    .https的握手协议: http://blog.csdn.net/clh604/article/details/221799072.证书的概念:http://blog.csdn.net/sealya ...

  4. javap生成的字节码

    https://www.zhihu.com/question/49470442/answer/135812845http://blog.csdn.net/tzs_1041218129

  5. RPM 包下载 GCC 4.8安装

    http://ftp.scientificlinux.org/linux/scientific/ http://www.rpmfind.net/linux/rpm2html/search.php?qu ...

  6. WebDriver基本API使用手册(基于Java和C#)

    WebDriver基本API使用手册(基于Java和C#) http://www.docin.com/p-747728551.html

  7. android html 与webview属性从冲突

    在最近的项目开发中,使用webview加载html页面,这样可以节省大量页面开发的时间,同时也可加快项目进度. 我们需求是需要显示商品评论,页面设计如下: 调用android代码,对于webview的 ...

  8. 解决删除域用户Exception from HRESULT: 0x80072030

    解决删除域用户异常问题. System.DirectoryServices.DirectoryServicesCOMException was unhandled  Message=在服务器上没有这样 ...

  9. 配置 Sublime Text 用 Node.js 执行 JavaScript 程序

    1. 首先到 nodejs.org 下载 Node.js 安装包并安装. 2. 打开 Sublime Text 2 编辑器.选择菜单 Tools --> Build System --> ...

  10. MyBatis知多少(15)数据模型

    瘦数据模型是一种最为臭名昭著并且问题多多的对关系数据库系统的滥用.不幸的是,有时又的确需要瘦数据模型.所谓瘦数据模型,就是简单地将每张表都设计为一种通用数据结构,用于存储名值对的集合.这非常像Java ...