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/
页:
[1]