使用新浪IP库获取IP详细地址
-
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地址类使用实例
-
$ipStr = Tool::getIpCity('112.65.102.16');
- print_r($ipStr);
-
- # 返回结果
- Array ( [country] => 中国 [province] => 上海 [city] => 上海 )
复制代码
|