1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > PHP 获取 IP 地址所在的地理位置信息/城市

PHP 获取 IP 地址所在的地理位置信息/城市

时间:2020-04-03 19:05:24

相关推荐

PHP 获取 IP 地址所在的地理位置信息/城市

源码:/hacfins/thinkphp6-api/blob/master/app/common/third/MapService.php

类似的博客很多,五花八门,来个自己封装的函数,只需调用淘宝网 API 接口,即可获取公网或局域网所在的地理位置信息。

直接上代码,很简单。

1、方案一

/

/*** 根据 Ip 获取地址位置*/function getIpInfo($internetIp = ''){try{//内网IP// A类10.0.0.0~10.255.255.255// B类172.16.0.0~172.31.255.255// C类192.168.0.0~192.168.255.255// ......$bLocalIp = !filter_var($internetIp, FILTER_VALIDATE_IP, FILTER_FLAG_NO_PRIV_RANGE | FILTER_FLAG_NO_RES_RANGE);if($bLocalIp)$internetIp = 'myip';//局域网IP$requestAPi = "/service/getIpInfo.php?ip=" . $internetIp;$opts = array('http' => array('method' => 'GET','timeout' => 1, // 单位秒));$jsonArr = json_decode( file_get_contents($requestAPi, false, stream_context_create($opts)),JSON_HEX_TAG | JSON_HEX_QUOT | JSON_HEX_AMP | JSON_HEX_APOS );// 说明断网if (!isset($jsonArr) || !isset($jsonArr['code'])){return false;}// 0 表示成功if ($jsonArr['code'] !== 0){return false;}// 返回的数据结果:// "ip": "223.98.166.115",// "country": "中国",// "area": "",// "region": "山东",// "city": "济南",// "county": "XX",// "isp": "移动",// "country_id": "CN",// "area_id": "",// "region_id": "370000",// "city_id": "370100",// "county_id": "xx",// "isp_id": "100025"$data = (array)$jsonArr['data'];return $data;}catch (\Exception $e){}return false;}

淘宝网 API 接口有限制调用频率

2、方案二

http://ip-/json/?lang=zh-CN

http://ip-/json/115.191.200.34?lang=zh-CN

附录:获取 IP 地址

/*** 获取客户端IP地址* @param int $type [IP地址类型]* @param bool $strict [是否以严格模式获取]* @return mixed [客户端IP地址]*/function client_ip($type = 0, $strict = false){$ip = null;// 0 返回字段型地址(127.0.0.1)// 1 返回长整形地址(2130706433)$type = $type ? 1 : 0;if ($strict) {/* 防止IP地址伪装的严格模式 */if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])) {$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);$pos = array_search('unknown', $arr);if (false !== $pos) {unset($arr[$pos]);}$ip = trim(current($arr));} elseif (isset($_SERVER['HTTP_CLIENT_IP'])) {$ip = $_SERVER['HTTP_CLIENT_IP'];} elseif (isset($_SERVER['REMOTE_ADDR'])) {$ip = $_SERVER['REMOTE_ADDR'];}} else if (isset($_SERVER['REMOTE_ADDR'])) {$ip = $_SERVER['REMOTE_ADDR'];}/* IP地址合法性验证 */$long = sprintf("%u", ip2long($ip));$ip = $long ? [$ip, $long] : ['0.0.0.0', 0];return $ip[$type];}

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。