$ _SERVER ['REMOTE_ADDR']基于浏览器的位置会回落吗?

时间:2014-10-06 06:35:03

标签: php jquery geolocation

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

我计划使用$_SERVER['REMOTE_ADDR']让用户ip进行geoip编码。 但是当使用手机和localhost时,我得到了错误的IP。 我尝试使用jquery来获取地理位置但是我无法将lat和lon插入到weblink中。 此时我正在使用它来克服我的问题并获得另一个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);
};

我使用上面的代码来获取lat和lon并将其插入到

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

然而,这只能在我的本地机器上运行,而不能在移动设备上运行,而且只需要使用lat和lon就可以完成很多工作。并且使用API​​获取另一个API信息在我看来是错的。

有没有我可以使用jquery或某种形式的浏览器位置的一切? 我的目标是让访客拉特和lon将其放入openweathermap.org api。

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

3 个答案:

答案 0 :(得分:0)

我会看看这个:

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

使用JavaScript从浏览器获取GeoLocation数据相当容易。

如果我正确理解您的问题,使用PHP获取此数据绝对不会对您有用,因为它始终会获取服务器信息。

答案 1 :(得分:0)

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

如果没有获取IP地址,您是否使用静态IP地址指向服务器?

如果您正在使用geoplugin API来获取用户IP地址的lat,lng,我认为不会总是给您提供更准确的结果。如果IP被错误地跟踪,那么以下所有操作结果也会变得无效,因此我理解您最后收到的天气数据。

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

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

答案 2 :(得分:0)

我最近开发了一个客户端解决方案(基于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>

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