Виявляємо регіон користувача по ip
Іноді потрібно виявити регіон користувача, що зайшов до нас на сайт. Щоб показати інформація, що належить цьому регіону чи країні.
Є безліч способів як це зробити, але найпопулярніший це по ip (хоча не дуже точний).
Розглянемо декілька варіантів.
1. GeoIP
Безкоштовний, через Модуль GeoIP дозволяє знайти розташування за IP-адресою. За допомогою GeoIP можна отримати таку інформацію як місто, держава, країна, довгота та широта, а також можна дізнатися, інтернет-провайдера та тип з'єднання.
Модуль має буди встановлений на вашому сервері
Приклад використання: Отримаємо код або повну назву країни
$ip_user = $_SERVER['REMOTE_ADDR']; // ip користувача що заходить на наш сайт
$country = geoip_country_code_by_name($ip_user); // Отримати двосимвольний код країни
//$country = geoip_country_name_by_name($ip_user); //Отримати повну назву країни
if ($country) {
echo sprintf("Хост знаходится в %s", $country);
}
//отримаємо: Хост знаходится в US
2. ipwhois.io
Cервіс ipwhois.io - він умовно безплатний.
Ви можете безкоштовно використовувати API до 10 000 запитів на місяць (ідентифікація за IP-адресою та заголовком Referer).
$ip = $_SERVER['REMOTE_ADDR']; // ip користувача що заходить на наш сайт
$ch = curl_init('http://ipwho.is/'.$ip);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$ipwhois = json_decode(curl_exec($ch), true);
curl_close($ch);
echo $ipwhois['country'] . ' ' . $ipwhois['flag']['emoji']; // Output: United States ??
Даних тут уже більше ніж у першому варіанті
{
"ip": "8.8.4.4",
"success": true,
"type": "IPv4",
"continent": "North America",
"continent_code": "NA",
"country": "United States",
"country_code": "US",
"region": "California",
"region_code": "CA",
"city": "Mountain View",
"latitude": 37.3860517,
"longitude": -122.0838511,
"is_eu": false,
"postal": "94039",
"calling_code": "1",
"capital": "Washington D.C.",
"borders": "CA,MX",
flag {
"img": "https://cdn.ipwhois.io/flags/us.svg",
"emoji": "??",
"emoji_unicode": "U+1F1FA U+1F1F8"
},
connection {
"asn": 15169,
"org": "Google LLC",
"isp": "Google LLC",
"domain": "google.com"
},
timezone {
"id": "America/Los_Angeles",
"abbr": "PDT",
"is_dst": true,
"offset": -25200,
"utc": "-07:00",
"current_time": "2022-04-22T14:31:48-07:00"
},
currency {
"name": "US Dollar",
"code": "USD",
"symbol": "$",
"plural": "US dollars",
"exchange_rate": 1
},
security {
"anonymous": false,
"proxy": false,
"vpn": false,
"tor": false,
"hosting": false
}
}
Більше інформація тут ipwhois.io/documentation
3. ip-api.com
Безкоштовно для некомерційного використання, ключ API не потрібен
Вся документація тут ip-api.com/docs
$ip = $_SERVER['REMOTE_ADDR']; // ip користувача що заходить на наш сайт
$ch = curl_init('http://ip-api.com/json/'.$ip);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, false);
$ipwhois = json_decode(curl_exec($ch), true);
curl_close($ch);
print_r($ipwhois);
/*
{
"query": "24.48.0.1",
"status": "success",
"country": "Canada",
"countryCode": "CA",
"region": "QC",
"regionName": "Quebec",
"city": "Montreal",
"zip": "H1K",
"lat": 45.6085,
"lon": -73.5493,
"timezone": "America/Toronto",
"isp": "Le Groupe Videotron Ltee",
"org": "Videotron Ltee",
"as": "AS5769 Videotron Telecom Ltee"
}
*/