Как я могу определить текущее местоположение пользователя на основе 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 - хороший сервис. У них также есть бесплатный сервис поиска на уровне города.
Ответ 7
Вы можете посмотреть GeoIP Country Whois Locator на PHPClasses.
Ответ 8
поскольку PHP полагается на сервер, в режиме реального времени не может быть предоставлено только статическое местоположение, лучше избегать полагаться на JS для местоположения, а не на php. Но есть необходимость опубликовать js-данные в php, чтобы он мог быть легко доступен для программы на сервере
Ответ 9
IP дает вам довольно ненадежное местоположение, вы можете Ajax местоположение при загрузке с помощью JS, если это не важно, чтобы иметь место вначале. (Кроме того, пользователю необходимо предоставить вам разрешение на доступ к нему.)
Ответ 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