php 怎么通过ip来获取所在位置

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了php 怎么通过ip来获取所在位置相关的知识,希望对你有一定的参考价值。

echo  getcposition(getIP());

function getIP()
    if (isset($_SERVER)) 
        if (isset($_SERVER[HTTP_X_FORWARDED_FOR])) 
            $realip = $_SERVER[HTTP_X_FORWARDED_FOR];
         elseif (isset($_SERVER[HTTP_CLIENT_IP])) 
            $realip = $_SERVER[HTTP_CLIENT_IP];
         else 
            $realip = $_SERVER[REMOTE_ADDR];
        
     else 
        if (getenv("HTTP_X_FORWARDED_FOR")) 
            $realip = getenv( "HTTP_X_FORWARDED_FOR");
         elseif (getenv("HTTP_CLIENT_IP")) 
            $realip = getenv("HTTP_CLIENT_IP");
         else 
            $realip = getenv("REMOTE_ADDR");
        
    
    return $realip;

function getcposition($ip)

$res1 = file_get_contents("http://ip.taobao.com/service/getIpInfo.php?ip=$ip");
$res1 = json_decode($res1,true);

//print_r($res1);
  if ($res1[ "code"]==0)
return $res1['data']["country"].$res1['data'][ "region"].$res1['data']["city"]."_".$res1['data'][ "isp"];
else
return "未知";
 

?>

参考技术A 可以使用第三方接口 比如百度地图 它可以通过ip来定位用户的经纬度坐标 有了坐标就可以直接定位用户所在城市和具体位置 参考技术B 我的代码,需要的朋友可以直接复制使用:
<?php
header('Content-Type:text/html;Charset=utf-8');
function GetIp()
$realip = '';
$unknown = 'unknown';
if (isset($_SERVER))
if(isset($_SERVER['HTTP_X_FORWARDED_FOR']) && !empty($_SERVER['HTTP_X_FORWARDED_FOR']) && strcasecmp($_SERVER['HTTP_X_FORWARDED_FOR'], $unknown))
$arr = explode(',', $_SERVER['HTTP_X_FORWARDED_FOR']);
foreach($arr as $ip)
$ip = trim($ip);
if ($ip != 'unknown')
$realip = $ip;
break;


else if(isset($_SERVER['HTTP_CLIENT_IP']) && !empty($_SERVER['HTTP_CLIENT_IP']) && strcasecmp($_SERVER['HTTP_CLIENT_IP'], $unknown))
$realip = $_SERVER['HTTP_CLIENT_IP'];
else if(isset($_SERVER['REMOTE_ADDR']) && !empty($_SERVER['REMOTE_ADDR']) && strcasecmp($_SERVER['REMOTE_ADDR'], $unknown))
$realip = $_SERVER['REMOTE_ADDR'];
else
$realip = $unknown;

else
if(getenv('HTTP_X_FORWARDED_FOR') && strcasecmp(getenv('HTTP_X_FORWARDED_FOR'), $unknown))
$realip = getenv("HTTP_X_FORWARDED_FOR");
else if(getenv('HTTP_CLIENT_IP') && strcasecmp(getenv('HTTP_CLIENT_IP'), $unknown))
$realip = getenv("HTTP_CLIENT_IP");
else if(getenv('REMOTE_ADDR') && strcasecmp(getenv('REMOTE_ADDR'), $unknown))
$realip = getenv("REMOTE_ADDR");
else
$realip = $unknown;


$realip = preg_match("/[\d\.]7,15/", $realip, $matches) ? $matches[0] : $unknown;
return $realip;


function GetIpLookup($ip = '')
if(empty($ip))
$ip = GetIp();

$res = @file_get_contents('http://int.dpool.sina.com.cn/iplookup/iplookup.php?format=js&ip=' . $ip);
if(empty($res)) return false;
$jsonMatches = array();
preg_match('#\.+?\#', $res, $jsonMatches);
if(!isset($jsonMatches[0])) return false;
$json = json_decode($jsonMatches[0], true);
if(isset($json['ret']) && $json['ret'] == 1)
$json['ip'] = $ip;
unset($json['ret']);
else
return false;

return $json;

$ipInfos = GetIpLookup('123.125.114.144'); //baidu.com IP地址
var_dump($ipInfos);

IP 地址是啥 可以通过它来定位电脑所在位置吗

如果可以定位,那么可以精确到什么地步呢

可以定位!!一般网站的IP地址是固定的!而个人的电脑IP是动态地址!!能通过IP知道一台电脑的大约位置!
参考资料:IP地址是IP网络中数据传输的依据,它标识了IP网络中的一个连接,一台主机可以有多个IP地址。IP分组中的IP地址在网络传输中是保持不变的。

(一).基本地址格式
现在的IP网络使用32位地址,以点分十进制表示,如172.16.0.0。地址格式为:IP地址=网络地址+主机地址 或 IP地址=主机地址+子网地址+主机地址。
网络地址是由Internet权力机构(InterNIC)统一分配的,目的是为了保证网络地址的全球唯一性。主机地址是由各个网络的系统管理员分配。因此,网络地址的唯一性与网络内主机地址的唯一性确保了IP地址的全球唯一性。

(二).保留地址的分配
根据用途和安全性级别的不同,IP地址还可以大致分为两类:公共地址和私有地址。公用地址在Internet中使用,可以在Internet中随意访问。私有地址只能在内部网络中使用,只有通过代理服务器才能与Internet通信。
(三)、IP地址分为A,B,C,D,E五类。
网络号:用于识别主机所在的网络;
主机号:用于识别该网络中的主机。
其中A类分配给政府机关使用,B类地址给大中型企业使用,C类地址给个人使用。这三种是主要的。
IP地址分为五类,A类保留给政府机构,B类分配给中等规模的公司,C类分配给任何需要的人,D类用于组播,E类用于实验,各类可容纳的地址数目不同。
其中A类、B类、和C类这三类地址用于TCP/IP节点,其它两类D类和E类被用于特殊用途。
A、B、C三类IP地址的特征:当将IP地址写成二进制形式时,A类地址的第一位总是O,B类地址的前两位总是10,C类地址的前三位总是110。
1. A类地址
(1)A类地址第1字节为网络地址,其它3个字节为主机地址。
(2)A类地址范围:1.0.0.1—126.155.255.254
(3)A类地址中的私有地址和保留地址:
① 10.X.X.X是私有地址(所谓的私有地址就是在互联网上不使用,而被用在局域网络中的地址)。
范围(10.0.0.0.0-10.255.255.255)
② 127.X.X.X是保留地址,用做循环测试用的。
2. B类地址
(1) B类地址第1字节和第2字节为网络地址,其它2个字节为主机地址。
(2) B类地址范围:128.0.0.1—191.255.255.254。
(3)B类地址的私有地址和保留地址
① 172.16.0.0—172.31.255.255是私有地址
② 169.254.X.X是保留地址。如果你的IP地址是自动获取IP地址,而你在网络上又没有找到可用的DHCP服务器。就会得到其中一个IP。
3. C类地址
(1)C类地址第1字节、第2字节和第3个字节为网络地址,第4个个字节为主机地址。另外第1个字节的前三位固定为110。
(2)C类地址范围:192.0.0.1—223.255.255.254。
(3) C类地址中的私有地址:
192.168.X.X是私有地址。(192.168.0.0-192.168.255.255)
4. D类地址
(1) D类地址不分网络地址和主机地址,它的第1个字节的前四位固定为1110。
(2)D类地址范围:224.0.0.1—239.255.255.254
5. E类地址
(1)E类地址也不分网络地址和主机地址,它的第1个字节的前五位固定为11110。
(2) E类地址范围:240.0.0.1—255.255.255.254
IP的概念是非常广泛的,包括品牌、商标、版权,还有很重要的就是商业秘密、商业模式、商业标准等。IP拥有量的多少,是区分制造与创造的最主要标志,一个国家拥有的IP太少,它的产业或者企业在国际分工中就只能扮演初级加工者的角色
参考技术A IP地址是有4组0-255的数字组成,表示计算机的地址。

这些地址有管理IP地址的运营商统一管理。一般用户的电脑联网时都是临时租用(动态)IP,无法确认电脑的所在地。
参考技术B 你好,很高兴能为你回答这个问题。
首先,你可能对IP地址这个概念不太理解。
1、IP地址可以分为两类,公网IP地址和私有IP地址。
公网IP地址你可以通过访问www.ip138.com查询自己的公网IP地址,可以通过这个定位你的城市,如果想要知道对方家在哪里,这就需要在电信部门查询信息了,除了公安部门和电信自己,我们一般人是没有权利查询的。
2、私有IP地址,你可能会发现,好多人电脑的IP地址都是192.168.1.XX或者0.XX,其实,在国际上,192.168.X.X被用作内部IP地址,用于一个局域网内。这个IP地址对于没有连接在你的网络上的人来说基本是没有任何作用的。
希望我的回答对你有所帮助。
参考技术C 恩。可以的。不过你自己是没法定位的。
还要看用的是那种网络的,有些网络是固定ip的,有些是在动态ip的。
参考技术D

九@州动态IP地址切换器,是用于在不同网络环境下快速切换IP地址等网络配置的软件工具。

1、给客户提供换ip功能,包含静态线路和动态线路选择

2、提供全国20多个省160多个城市千万ip地址随意选择

3、提供静态ip.动态ip地址供客户长期使用

多IP地区

以上是关于php 怎么通过ip来获取所在位置的主要内容,如果未能解决你的问题,请参考以下文章

php怎么实现定位?除了ip

php获取了ip地址,用php怎么获取ip的地理位置?请大虾赐教!

通过IP地址获取所在城市(高德)

通过网络请求获取当前IP,并得到大致位置

php 获取准确的ip,并通过ip准确获取所在区域 的方法

通过 GPS/IP 获取 iPhone 的位置