淘宝公司提供了一个很好用的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地址查询-身份证查询-域名备案查询--Api接口

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

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

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

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

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

  4. php查询ip地址来源归属地的脚本

    <?php header('Content-Type:text/html;charset=utf-8'); if($_GET['sub']){ $ip = $_GET['ip']; $msg = ...

  5. 手机号段、ip地址归属地大全,最新手机号段归属地,IP地址归属地数据库

    百事通:http://www.114best.com/dh/114.aspx?w=17097232323,联通识别为电信的,1349错 二三四五:http://tools.2345.com/frame ...

  6. Linux socket编程 DNS查询IP地址

    本来是一次计算机网络的实验,但是还没有完全写好,DNS的响应请求报文的冗余信息太多了,不只有IP地址.所以这次的实验主要就是解析DNS报文.同时也需要正确的填充请求报文.如果代码有什么bug,欢迎指正 ...

  7. Trie树的应用:查询IP地址的ISP

    1. 问题描述 给定一个IP地址,如何查询其所属的ISP,如:中国移动(ChinaMobile),中国电信(ChinaTelecom),中国铁通(ChinaTietong)?现有ISP的IP地址区段可 ...

  8. ubuntu16.04 查询ip,网关,dns信息

    用ifconfig命令只能查询ip,子网掩码信息,不能获取dns和网关信息 用下面命令即可查询 nmcli dev show

  9. PHP使用curl伪造IP地址和header信息

    curl虽然功能强大,但是只能伪造$_SERVER["HTTP_X_FORWARDED_FOR"],对于大多数IP地址检测程序来说,$_SERVER["REMOTE_AD ...

随机推荐

  1. linux 卸载编译安装的软件

    有些软件会有 make uninstall 之类的功能,但大多都没有,所以只有手动删除,或者在configure的时候加个preifx参数,比如 --preifx=/opt/squid,这样当你不用的 ...

  2. MAC OS上Nginx安装

    admin@admindeMac:local]$ brew install nginx ==> Installing dependencies for nginx: pcre, openssl ...

  3. ASP.NET 5探险(8):利用中间件、TagHelper来在MVC 6中实现Captcha

    (此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:由于ASP.NET 5及MVC 6是一个微软全新重新的Web开发平台,之前一些现有的验 ...

  4. PNG图片压缩工具

    https://tinypng.com/ 效果非常不错. 340k的图能压缩到140k左右. 视觉效果差距不大

  5. C# 特性详解

    特性(attribute)是被指定给某一声明的一则附加的声明性信息. 在C#中,有一个小的预定义特性集合. using System; public class AnyClass { [Obsolet ...

  6. Bonobo Git Server (Simple git server for Windows.) 测试备忘

    Bonobo Git Server是一款Windows上的Git Server,它使用IIS即可,走的是Http协议,只要简单的安装就能使用,但是因为我的项目大小有1.35GB在 push 的时候一直 ...

  7. MySQL 用户管理&mdash;&mdash;权限表

    权限表 权限表存放在mysql数据库中 user表结构 用户列:Host.User.Password 权限列:*priv 资源控制列:max* 安全列:其余   db表 存储了用户对某个数据库的操作权 ...

  8. MySql避免重复插入记录方法(ignore,Replace,ON DUPLICATE KEY UPDATE)

    ON DUPLICATE KEY UPDATE  博客 http://blog.csdn.net/jbboy/article/details/46828917

  9. iOS开发——动画编程Swift篇&amp;(四)CABasicAnimation动画

    CABasicAnimation动画 //CABasicAnimation-不透明度 @IBAction func cabOpacity() { let animation = CABasicAnim ...

  10. Hbase的安装测试工作

    Hbase的安装测试工作: 安装:http://www.cnblogs.com/neverwinter/archive/2013/03/28/2985798.html 测试:http://www.cn ...