如何通过客户端ip获取经度和纬度?

时间:2014-03-11 10:52:28

标签: php wordpress web

我使用此功能来获取客户端IP工作

function get_client_ip() {
    $ipaddress = '';
    if ($_SERVER['HTTP_CLIENT_IP'])
        $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
    else if($_SERVER['HTTP_X_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
    else if($_SERVER['HTTP_X_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
    else if($_SERVER['HTTP_FORWARDED_FOR'])
        $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
    else if($_SERVER['HTTP_FORWARDED'])
        $ipaddress = $_SERVER['HTTP_FORWARDED'];
    else if($_SERVER['REMOTE_ADDR'])
        $ipaddress = $_SERVER['REMOTE_ADDR'];
    else
        $ipaddress = 'UNKNOWN';

    return $ipaddress; 
}

$ip = get_client_ip();

但是如何通过服务器端而不是客户端获得经纬度?

4 个答案:

答案 0 :(得分:4)

来自php.net的最佳选择,它也是开源的:Geo IP

您可以按照以下步骤安装它。我在提供的链接上给出了哪些内容:

在终端中运行这些命令。

wget http://geolite.maxmind.com/download/geoip/database/GeoLiteCity.dat.gz
gunzip GeoLiteCity.dat.gz
sudo mkdir -v /usr/share/GeoIP
sudo mv -v GeoLiteCity.dat /usr/share/GeoIP/GeoIPCity.dat

sudo apt-get install php5-geoip

希望它有所帮助!!

答案 1 :(得分:3)

PHP没有内置的支持。您可以使用第三方库(如ip2location)从IP地址中获取经度和纬度。

Sidenote :通过IP地址确定纬度 - 经度可能无法获取准确的信息。

使用geoplugin.net。看看这是否适合你。

<?php
$new_arr[]= unserialize(file_get_contents('http://www.geoplugin.net/php.gp?ip='.$_SERVER['REMOTE_ADDR']));
echo "Latitude:".$new_arr[0]['geoplugin_latitude']." and Longitude:".$new_arr[0]['geoplugin_longitude'];

<强> OUTPUT :

Latitude:180.240601 and Longitude:12.9819

答案 2 :(得分:1)

对于快速的复制粘贴解决方案,我编写了完成此任务的代码。

我使用这个功能:

    function getUserIP()
    {
        $client  = @$_SERVER['HTTP_CLIENT_IP'];
        $forward = @$_SERVER['HTTP_X_FORWARDED_FOR'];
        $remote  = $_SERVER['REMOTE_ADDR'];

        if(filter_var($client, FILTER_VALIDATE_IP))
        {
            $ip = $client;
        }
        elseif(filter_var($forward, FILTER_VALIDATE_IP))
        {
            $ip = $forward;
        }
        else
        {
            $ip = $remote;
        }

        return $ip;
    }

    $ipAddr = getUserIP();

    $geoIP  = json_decode(file_get_contents("http://freegeoip.net/json/$ipAddr"), true);

    echo 'lat: ' . $geoIP['latitude'] . '<br />';
    echo 'long: ' . $geoIP['longitude'];

输出:

34.0731
118.3994

它使用(免费)freegeoip.net API,我发现它具有非常快的综合数据库。它是免费的,每小时限制10000个请求(每秒不到3个),这对于大多数项目来说都是足够的。需要。

答案 3 :(得分:1)

您应该考虑使用Javascript API navigator.geolocation从客户端获取用户的确切位置。使用它的好处是,它是准确的。

IP to Geo的问题在于,无法保证信息准确无误。这取决于数据的更新程度。

另一方面,javascript API直接根据GPS或网络地址(以准确者为准)获取地理位置。但是用户必须允许访问他的GPS。

您可以使用Javascript(如果用户授予权限)或回退到地理转换

如何使用

 if (navigator.geolocation && navigator.geolocation.getCurrentPosition) {
      navigator.geolocation.getCurrentPosition(function(position) {
          // save location by sending to server
      }, function() { alert("Couldn't get your position!"); });
 }