php查询IP地址归属等信息

王朝学院·作者佚名  2016-05-25
窄屏简体版  字體: 小  |  中  |  大  |  超大  

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/

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航