【问题标题】:Location Tracking using IP使用 IP 进行位置跟踪
【发布时间】:2015-06-30 06:07:42
【问题描述】:

我想使用访问我网站的访问者的 IP 来实施位置跟踪器。 我正在使用以下代码:

<?php
error_reporting(E_ERROR | E_PARSE);

$info = file_get_contents("http://api.hostip.info/get_html.php");
$arr1 = preg_split("/[\s,]+/", "$info");
end($arr1);

$z         = prev($arr1);
$geoplugin = unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip=$z') );
$loc       = $geoplugin['geoplugin_regionName'];

echo "<td><input type='text' name='location' value='$loc'  style='width:250px;height:50px;display:inline;background- color:#FFF;color:black;border-radius:0px;border:1px solid #C8C8C8' placeholder='Current Location'></td>"; ?>

但是,我无法获得具体的位置,而且每次都显示不同的位置。

【问题讨论】:

  • 你在$info得到什么
  • 你是怎么想到的?第一个服务不是为访问者/客户端提供 IP,而是为您的服务器提供 IP。
  • 我从 $info 获取 ip,然后从该 ip 获取位置。
  • 哦,那么要进行哪些更改才能获取访问者 ip?

标签: php location


【解决方案1】:

GeoPlugin IP Detection

<?php
    $user_ip = getenv('http://api.hostip.info/get_html.php');
    $geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
    $city = $geo["geoplugin_city"];
    $region = $geo["geoplugin_regionName"];
    $country = $geo["geoplugin_countryName"];

否则你可以使用

ipinfo.io General Logging

ipinfo.io Developer Logging

完整的 IP 详细信息

$ curl ipinfo.io/8.8.8.8
{
  "ip": "8.8.8.8",
  "hostname": "google-public-dns-a.google.com",
  "loc": "37.385999999999996,-122.0838",
  "org": "AS15169 Google Inc.",
  "city": "Mountain View",
  "region": "California",
  "country": "US",
  "phone": 650
}

IPv6

在查找 IPv6 地址数据和发出 IPv6 请求方面,都完全支持 IPv6。

$ curl ipinfo.io
{
  "ip": "2601:9:7680:363:75df:f491:6f85:352f",
  "hostname": "No Hostname",
  "city": null,
  "region": null,
  "country": "US",
  "loc": "38.0000,-97.0000",
  "org": "AS7922 Comcast Cable Communications, Inc."
}

http://ipinfo.io/json为你自己的IP

http://ipinfo.io/8.8.8.8/json了解另一个IP的详细信息

JSONP

还支持 JSONP,它允许您完全在客户端代码中使用 ipinfo.io。您只需要指定回调参数,例如。 http://ipinfo.io/?callback=callback。大多数 javascript 库会自动为您处理这个问题。这是一个记录客户端 IP 和国家/地区的 jQuery 示例:

$.get("http://ipinfo.io", function(response) {
    console.log(response.ip, response.country);
}, "jsonp");

【讨论】:

    【解决方案2】:

    这行得通:

    <?php
    error_reporting(E_ERROR | E_PARSE);
    $ip = $_SERVER['REMOTE_ADDR'];
    
    $url = 'http://www.geoplugin.net/php.gp?ip='.$ip;
    $geoplugin = unserialize(file_get_contents($url));
    // print_r($geoplugin); // To see what keys are available...
    
    $loc = $geoplugin['geoplugin_countryName'];
    echo "
        <td>
            <input type='text' name='location' value='$loc' style='width:250px;height:50px;display:inline;background-color:#FFF;color:black;border-radius:0px;border:1px solid #C8C8C8' placeholder='Current Location'/>
        </td>
    ";
    ?>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-01-13
      • 2017-03-31
      • 1970-01-01
      • 2015-11-01
      • 1970-01-01
      • 2013-05-17
      • 2018-05-15
      • 1970-01-01
      相关资源
      最近更新 更多