'http://ip-api.com/json/%s?lang=%s', // IP解析 'ip-api—data'=>'https://www.ip.cn/api/index?ip=%s&type=1', ]; /** * @return static|null */ public static function make(){ if(!self::$instance){ self::$instance = new static(); } return self::$instance; } /** * 获取IP对应地址 * @param $ip IP * @param $returnKey 返回数据格式:返回某个字段,空返回全部 * @param $lang 返回数据语言格式:zh-CN(中文)、en(英文拼音) * @return array|bool */ public function getIpAddress($ip, $returnKey = '', $lang='zh-CN'){ $apiUrl = $this->apiUrls['ip-api']; if(empty($urls) || empty($ip)){ return false; } $cacheKey = "caches:address:ip_".$ip.'_'.$returnKey; $result = RedisService::get($cacheKey); $data = isset($result['data']) && !is_array($result['data'])? trim($result['data']) : ''; if(!empty($data)){ return $data; } $apiUrl = sprintf($apiUrl, $ip, $lang); $result = httpRequest($apiUrl,'','get'); $status = isset($result['status'])? $result['status'] : ''; if($status == 'success'){ $result = [ 'country'=> isset($result['country'])? strtolower($result['country']) : '中国', 'countryCode'=> isset($result['countryCode'])? strtolower($result['countryCode']) : 'zh-CN', 'region'=> isset($result['region'])? $result['region'] : '', 'regionName'=> isset($result['regionName'])? $result['regionName'] : '', 'city'=> isset($result['city'])? $result['city'] : '', 'lat'=> isset($result['lat'])? $result['lat'] : '', 'lng'=> isset($result['lon'])? $result['lon'] : '', 'ip'=> isset($result['query'])? $result['query'] : '', ]; $data = $returnKey && isset($result[$returnKey])? $result[$returnKey] : $result; if(!empty($data)){ RedisService::set($cacheKey, ['apiUrl'=> $apiUrl, 'data'=> $data, 'result'=> $result], 3600); return $data; } } return false; } }