Получить текущее местоположение пользователя

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

Ответ 1

Существуют сторонние решения Ipinfodb - это тот, который я использовал в прошлом, я думаю, что у них есть библиотека php, которую вы можете использовать

Ответ 2

<?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"];
?>

Ответ 3

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

Измените 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'];
?>

Ответ 4

Попробуйте использовать этот код, используя службу 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);

Ответ 5

<?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>";
}
?>

Попробуйте использовать этот код с помощью этого источника. он работает!

Ответ 6

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

Ответ 8

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

Ответ 9

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

Html5 Geolocation

Ответ 10

Старый 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