我使用此功能来获取客户端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();
但是如何通过服务器端而不是客户端获得经纬度?
答案 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地址确定纬度 - 经度可能无法获取准确的信息。
<?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!"); });
}