【问题标题】:$_SERVER['REMOTE_ADDR'] With browser based location fall back?$_SERVER['REMOTE_ADDR'] 使用基于浏览器的位置回退?
【发布时间】:2014-10-06 06:35:03
【问题描述】:

我正在本地主机上进行一些编码,并通过我的手机和平板电脑进行测试。

我计划使用$_SERVER['REMOTE_ADDR'] 获取用户 ip 以进行 geoip 编码。 但是,当使用手机和本地主机时,我得到了错误的 IP。 我尝试使用 jquery 来获取地理位置,但是我无法将 lat 和 lon 插入到网络链接中。 目前我正在使用它来克服我的问题并为另一个 API 获取 IP lat 和 lon。

$b = '192.168.1.1';
if($_SERVER['REMOTE_ADDR'] == $b)
{
    $response = file_get_contents('http://www.geoplugin.net/json.gp?ip=18.252.235.89');
    $area = json_decode($response, true);
}
else
{
    $response = file_get_contents('http://www.geoplugin.net/php.gp?ip='.$_SERVER['REMOTE_ADDR']);

    $area = json_decode($response, true);
};

我正在使用上面的代码来获取纬度和经度并将其插入到

http://api.openweathermap.org/data/2.5/weather?q='.$area["geoplugin_city"],$area["geoplugin_region"].'&APPID=000000

但是,这只适用于我的本地机器,不适用于移动设备,而且要获得 lat 和 lon 的工作量很大;在我看来,使用 API 获取另一个 API 信息是错误的。

我可以使用 jquery 或某种形式的浏览器位置来处理所有事情吗? 我的目标是让经纬度访问者将其放入 openweathermap.org api。

我希望我已经提供了每个人都需要帮助我的信息。

【问题讨论】:

    标签: php jquery geolocation


    【解决方案1】:

    我最近开发了一个客户端解决方案(基于 IP 地址)。它叫userinfo.io

    基本上,您会在页面中插入此脚本:

    <script type="text/javascript" href="//cdnjs.cloudflare.com/ajax/libs/userinfo/1.0.0/userinfo.min.js"></script>
    

    并获取描述您的用户的 javascript 对象:

    <script type="text/javascript">
    UserInfo.getInfo(function(data) {
      console.log(data.position.latitude); // That's your latitude
      console.log(data.position.longitude); // That's your longitude
      // There are plenty of other information in the "data" object
    }, function(err) {
      // the "err" object contains useful information in case of an error
    });
    </script>
    

    这对你来说是个不错的选择。

    【讨论】:

      【解决方案2】:

      我会看看这个:

      https://developer.mozilla.org/en-US/docs/Web/API/Geolocation.getCurrentPosition

      使用 JavaScript 从浏览器获取地理位置数据相当容易。

      如果我正确理解了您的问题,那么使用 PHP 获取这些数据肯定对您不起作用,因为它总是会获取服务器信息。

      【讨论】:

      • 我想我遇到的问题是从 JavaScript 中获取纬度和经度并将其放入 openweathermap.org api 链接!
      • skype 我:mattsbi,我会尽快帮助您。否则,我认为您需要创建一个新问题。
      【解决方案3】:

      您是否尝试过浏览器嵌入的 HTML5 Geolocation API,它会为您提供当前位置的纬度和经度?但是,我不会为此推荐任何特定于浏览器的 API。

      由于无法获取 IP 地址,您是否使用静态 IP 地址来指向您的服务器?

      如果您使用 geoplugin API 只是为了获取 lat、lng 来获取用户的 IP 地址,我认为这不会总是为您提供准确的结果。如果 IP 跟踪不正确,那么所有后续操作结果也将变为无效,因此您最终收到的天气数据据我所知。

      我认为更好的方法是使用 HTML5 GeoLocation 在客户端查找用户的 lat、lng 并将它们发送到您的 php 代理,该代理将调用天气 API 并返回必要的结果。您可以使用 AJAX 完成此操作。如果该天气 API 没有 CORS 限制或不支持 jsonp,您可以绕过单独的代理直接调用天气 API。

      如果 HTML5 GeoLocation 最初失败,您可以使用一些备用选项,例如 Maxmind API 和 Google Map API。

      【讨论】:

        猜你喜欢
        • 2013-10-19
        • 2014-04-13
        • 1970-01-01
        • 2018-12-09
        • 1970-01-01
        • 2018-01-15
        • 1970-01-01
        • 1970-01-01
        • 2017-01-03
        相关资源
        最近更新 更多