Получить текущее местоположение пользователя - PullRequest
34 голосов
/ 23 марта 2011

Как я могу определить текущее местоположение пользователя на основе IP (я думаю, это работает так).

Ответы [ 9 ]

30 голосов
/ 01 июля 2015
<?php
$user_ip = getenv('REMOTE_ADDR');
$geo = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=$user_ip"));
$country = $geo["geoplugin_countryName"];
$city = $geo["geoplugin_city"];
?>
21 голосов
/ 09 августа 2016

Отредактировано

Изменить freegeoip.net на ipinfo.io

<?php    
function get_client_ip() {
        $ipaddress = '';
        if (isset($_SERVER['HTTP_CLIENT_IP']))
            $ipaddress = $_SERVER['HTTP_CLIENT_IP'];
        else if(isset($_SERVER['HTTP_X_FORWARDED_FOR']))
            $ipaddress = $_SERVER['HTTP_X_FORWARDED_FOR'];
        else if(isset($_SERVER['HTTP_X_FORWARDED']))
            $ipaddress = $_SERVER['HTTP_X_FORWARDED'];
        else if(isset($_SERVER['HTTP_FORWARDED_FOR']))
            $ipaddress = $_SERVER['HTTP_FORWARDED_FOR'];
        else if(isset($_SERVER['HTTP_FORWARDED']))
            $ipaddress = $_SERVER['HTTP_FORWARDED'];
        else if(isset($_SERVER['REMOTE_ADDR']))
            $ipaddress = $_SERVER['REMOTE_ADDR'];
        else
            $ipaddress = 'UNKNOWN';
        return $ipaddress;
    }
 $PublicIP = get_client_ip(); 
 $json  = file_get_contents("http://ipinfo.io/$PublicIP/geo");
 $json  =  json_decode($json ,true);
 $country =  $json['country'];
 $region= $json['region'];
 $city = $json['city'];

?>
9 голосов
/ 08 марта 2017
<?php
$query = @unserialize (file_get_contents('http://ip-api.com/php/'));
if ($query && $query['status'] == 'success') {
echo 'Hey user from ' . $query['country'] . ', ' . $query['city'] . '!';
}
foreach ($query as $data) {
    echo $data . "<br>";
}
?>

Попробуйте этот код, используя этот источник.это работает!

9 голосов
/ 17 августа 2012

Попробуйте этот код, используя сервис hostip.info :

$country=file_get_contents('http://api.hostip.info/get_html.php?ip=');
echo $country;

// Reformat the data returned (Keep only country and country abbr.)
$only_country=explode (" ", $country);

echo "Country : ".$only_country[1]." ".substr($only_country[2],0,4);
4 голосов
/ 23 марта 2011

MaxMind GeoIP - хороший сервис. У них также есть бесплатный сервис поиска на уровне города.

3 голосов
/ 23 марта 2011

Возможно, вы захотите взглянуть на GeoIP Country Whois Locator , найденный на PHPClasses .

2 голосов
/ 09 июня 2016

, поскольку PHP зависит от сервера, местоположение в реальном времени не может быть предоставлено, только статическое местоположение может быть обеспечено, лучше избегать полагаться на JS для определения местоположения, а не использовать php.Но необходимо публиковать данные js в php, чтобы их можно было легко программировать на сервере

0 голосов
/ 14 мая 2018

Старый API freegeoip устарел и будет прекращен 1 июля 2018 года.

Новый API от https://ipstack.com. Вы должны создать учетную запись в ipstack. Затем вы можете использовать ключ доступа в URL-адресе API.

$url = "http://api.ipstack.com/122.167.180.20?access_key=ACCESS_KEY&format=1";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_PROXYPORT, 3128);
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);
$response = curl_exec($ch);
curl_close($ch);
$response = json_decode($response);
$city  = $response->city; //You can get all the details like longitude,latitude from the $response .

Для получения дополнительной информации проверьте здесь: / https://github.com/apilayer/freegeoip

0 голосов
/ 18 февраля 2014

IP дает вам довольно ненадежное местоположение, вы можете Ajax определить местоположение при загрузке с JS, если сначала нет необходимости иметь это местоположение. (Кроме того, пользователь должен дать вам разрешение на доступ к нему.)

Географическое положение HTML5

...