Виявляємо регіон користувача по ip

Інше 2 хвилин 53 секунд 19 лип. 2022
 Виявляємо регіон користувача по 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"
}

*/