本文实例讲述了PHP基于新浪IP库获取IP详细地址的方法。分享给大家供大家参考,具体如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
<?php class Tool{ /** * 获取IP的归属地( 新浪IP库 ) * * @param $ip String IP地址:112.65.102.16 * @return Array */ static public function getIpCity( $ip ) { $ip = preg_replace( "/\s/" , "" ,preg_replace( "/\r\n/" , "" , $ip )); $link = "http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=" . $ip . "&t=" .time(); $ipJson = self::httpCurl( $link ); preg_match( "/\"country\":\"(.*)\"/Uis" , $ipJson , $match1 ); preg_match( "/\"province\":\"(.*)\"/Uis" , $ipJson , $match2 ); preg_match( "/\"city\":\"(.*)\"/Uis" , $ipJson , $match3 ); return array ( 'country' =>self::ucode2zh( $match1 [1]), // 国家 'province' =>self::ucode2zh( $match2 [1]), // 省 'city' =>self::ucode2zh( $match3 [1]) // 城市 ); } /** * Curl方式获取信息 */ static public function httpCurl( $url ) { $curl_handle = curl_init(); curl_setopt( $curl_handle , CURLOPT_URL, $url ); curl_setopt( $curl_handle , CURLOPT_CONNECTTIMEOUT,2); curl_setopt( $curl_handle , CURLOPT_RETURNTRANSFER,1); curl_setopt( $curl_handle , CURLOPT_FAILONERROR,1); $file_content = curl_exec( $curl_handle ); curl_close( $curl_handle ); return $file_content ; } /** * 将unicode编码转化为中文,转化失败返回原字符串 * * @param $code String unicode编码 * @return String */ static public function ucode2zh( $code ) { $temp = explode ( '\u' , $code ); $rslt = array (); array_shift ( $temp ); foreach ( $temp as $k => $v ) { $v = hexdec( $v ); $rslt [] = '&#' . $v . ';' ; } $r = implode( '' , $rslt ); return empty ( $r ) ? $code : $r ; } } |
获取IP地址类使用实例
1
2
3
|
<?php $ipStr = Tool::getIpCity( '112.65.102.16' ); print_r( $ipStr ); |
返回结果
1
|
Array ( [country] => 中国 [province] => 上海 [city] => 上海 ) |
希望本文所述对大家PHP程序设计有所帮助。