使用新浪IP库获取IP详细地址
- class Tool{
- /**
- * Get the IP ownership (Sina IP library)
- *
- * @param $ip String IP address: 112.65.102.16
- * @return Array
- */
- static public function getIpCity($ip)
- {
- $ip = preg_replace("/s/","",preg_replace("/rn/","",$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 method to obtain information
- */
- 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;
- }
-
- /**
- * Convert unicode encoding to Chinese, return the original string if the conversion fails
- *
- * @param $code String unicode encoding
- * @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地址类使用实例
- $ipStr = Tool::getIpCity('112.65.102.16');
- print_r($ipStr);
- # 返回结果
- Array ( [country] => 中国 [province] => 上海 [city] => 上海 )
复制代码
|