• php查询IP地址归属等信息


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

    类 TaobaoIPQuery2 文件:

     1 <?php
     2 /* Usage:
     3  * $IPInfo = TaobaoIPQuery2::getIPInfo('IPAddress');
     4 
     5 http://www.cnblogs.com/roucheng/
     6  */
     7 Class TaobaoIPQuery2{
     8     private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
     9     public static function getIPInfo($ip){
    10         $long = ip2long($ip);
    11         if($long === 0){
    12             throw new Exception('IP address error', 5);
    13         }
    14         $ip=long2ip($long);
    15         $IPInfo = self::queryIPInfo($ip);
    16         return self::parseJSON($IPInfo);
    17     }
    18     
    19     private static function queryIPInfo($ip){
    20         $query = http_build_query(array('ip'=>$ip));
    21         $ch = curl_init();
    22         $options = array(
    23             CURLOPT_URL => sprintf('%s?%s', self::$_requestURL, $query),
    24             CURLOPT_RETURNTRANSFER => true,
    25             CURLOPT_AUTOREFERER => false,
    26             CURLOPT_FOLLOWLOCATION => false,
    27             CURLOPT_HEADER => false,
    28             CURLOPT_TIMEOUT => 3.0,
    29         );
    30         curl_setopt_array($ch, $options);
    31         $content = curl_exec($ch);
    32         curl_close($ch);
    33         return $content;
    34     }
    35     
    36     private static function parseJSON($json){
    37         $O = json_decode ($json, true);
    38         if(false === is_null($O)){
    39             return $O;
    40         }
    41         if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
    42             $errorCode = json_last_error();
    43             if(isset(self::$_JSONParseError[$errorCode])){
    44                 throw new Exception(self::$_JSONParseError[$errorCode], 5);
    45             }
    46         }
    47         throw new Exception('JSON parse error', 5);
    48     }
    49     
    50     private static $_JSONParseError = array(
    51         JSON_ERROR_NONE=>'No error has occurred',   
    52         JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',   
    53         JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',   
    54         JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',   
    55         JSON_ERROR_SYNTAX=>'Syntax error',   
    56         JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded',
    57     );
    58 }

    TaobaoIPQuery2.Class.php:

     1 <?php
     2 Class TaobaoIPQuery2{
     3     private static $_requestURL = 'http://ip.taobao.com/service/getIpInfo.php';
     4     public static function getIPInfo($ip){
     5         $long = ip2long($ip);
     6         if($long === 0){
     7             throw new Exception('IP address error', 5);
     8         }
     9         $ip=long2ip($long);
    10         $IPInfo = self::queryIPInfo($ip);
    11         return self::parseJSON($IPInfo);
    12     }
    13     
    14     private static function queryIPInfo($ip){
    15         $query = http_build_query(array('ip'=>$ip));
    16         $ch = curl_init();
    17         $options = array(
    18             CURLOPT_URL => sprintf('%s?%s', self::$_requestURL, $query),
    19             CURLOPT_RETURNTRANSFER => true,
    20             CURLOPT_AUTOREFERER => false,
    21             CURLOPT_FOLLOWLOCATION => false,
    22             CURLOPT_HEADER => false,
    23             CURLOPT_TIMEOUT => 3.0,
    24         );
    25         curl_setopt_array($ch, $options);
    26         $content = curl_exec($ch);
    27         curl_close($ch);
    28         return $content;
    29     }
    30     
    31     private static function parseJSON($json){
    32         $O = json_decode ($json, true);
    33         if(false === is_null($O)){
    34             return $O;
    35         }
    36         if (version_compare(PHP_VERSION, '5.3.0', '>=')) {
    37             $errorCode = json_last_error();
    38             if(isset(self::$_JSONParseError[$errorCode])){
    39                 throw new Exception(self::$_JSONParseError[$errorCode], 5);
    40             }
    41         }
    42         throw new Exception('JSON parse error', 5);
    43     }
    44     /* http://www.cnblogs.com/roucheng/ */
    45     private static $_JSONParseError = array(
    46         JSON_ERROR_NONE=>'No error has occurred',   
    47         JSON_ERROR_DEPTH=>'The maximum stack depth has been exceeded',   
    48         JSON_ERROR_CTRL_CHAR=>'Control character error, possibly incorrectly encoded',   
    49         JSON_ERROR_STATE_MISMATCH=>'Invalid or malformed JSON',   
    50         JSON_ERROR_SYNTAX=>'Syntax error',   
    51         JSON_ERROR_UTF8=>'Malformed UTF-8 characters, possibly incorrectly encoded',
    52     );
    53 }

    调用:

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

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

  • 相关阅读:
    使用Java实现对MySql数据库的导入与导出
    【转】揭开J2EE集群的神秘面纱
    Memcached深度分析
    HSQL入门及使用指南
    系统架构基础篇(高性能基础建设说明与选型条件)
    架构之美 摘抄
    JMS规范及相关实现
    spring3中使用@value注解获取属性值
    Thread Dump 分析综述
    什么中间件及中间件服务器?
  • 原文地址:https://www.cnblogs.com/roucheng/p/3512232.html
Copyright © 2020-2023  润新知