Я хотел бы определить страну пользователя, поэтому предварительно выберите ее в раскрывающемся списке в форме php. Я попытался сделать это, получив IP-адрес пользователя, а затем использовал Maxmind Geoip для получения названия страны из ip. Все работает хорошо, за исключением случаев, когда пользователь отстает от vpn, и это когда я не могу получить реальный ip (и, следовательно, страну) пользователя, если он / она находится за прокси-сервером или использует VPN.
Я прочитал какой-то похожий пост, такой как Как получить реальный IP от посетителя? а также Какой самый точный способ получить правильный IP-адрес пользователя в PHP?, и попробовал
$ _SERVER [‘REMOTE_ADDR’], $ _SERVER [‘HTTP_X_FORWARDED_FOR’], getenv (‘REMOTE_ADDR’) и т. Д., Но ни один из них не вернул исходный ip, когда я отстаю от vpn.
Мне действительно интересно узнать, есть ли способ получить реальный IP-адрес пользователя (например, мне очень интересно узнать, как некоторые веб-сайты любят http://whatismyip.com вернуть оригинальный ip?).
Если действительно не возможно получить этот оригинальный ip в php, как сказано в этом посте, Есть ли другой способ определения страны пользователя? (Я также подумал о языке браузера, но думаю, что в моем случае это было бы бесполезно, поскольку, например, многие пользователи могут установить его на английский, когда они принадлежат к другим странам)
Любая идея будет высоко оценена,
Теоретически всегда можно отследить IP-адрес, если у вас есть доступ к интернет-провайдеру и т. Д. Однако с точки зрения программистов не существует определенного способа узнать реальный IP-адрес посетителей, поэтому у вас никогда не будет 100% точности. Есть вещи, которые вы можете сделать для повышения точности, например, вы предложили $ _SERVER [‘REMOTE_ADDR’], $ _SERVER [‘HTTP_X_FORWARDED_FOR’]. Возможно, кто-то еще может помочь вам разобраться с другими методами, которые улучшат точность
Поскольку IP-блоки постоянно перемещаются через интернет-провайдеров, собрать современную базу данных для ваших приложений непросто.
Вот пример с одним из бесплатных API:
function get_ip_details($ip_address)
{
//function to find country, city and country code from IP.
//verify the IP.
ip2long($ipAddr)== -1 || ip2long($ipAddr) === false ? trigger_error("Invalid IP", E_USER_ERROR) : "";
//get the JSON result from hostip.info
$result = file_get_contents("http://api.hostip.info/get_json.php?ip=".$ip_address);
$result = json_decode($result, 1);
//return the array containing city, country and country code
return $result;
}
Результатом будет что-то похожее на этот ответ JSON
Кроме того, в большинстве современных веб-браузеров это будущее уже встроено, поэтому вы можете получить страну пользователя на лету без сторонних API: демонстрация
Изменить: в случае ОП невозможно узнать страну пользователя.