2.8.19. Визначення країни відвідувача у PHP

Варіанти використання коду країни в .htaccess описані тут.

Кожен запит на сайт містить спеціальний заголовок HTTP_GEOIP_COUNTRY_CODE, в якому міститься двобуквений код країни відвідувача (ISO 3166). Країна визначається виходячи з IP-адреси відвідувача за даними MaxMind GeoLite.

Отримати двобуквений код країни в PHP можна з серверної змінної $_SERVER['HTTP_GEOIP_COUNTRY_CODE']. Приклад коду для блокування POST-запитів з будь-яких країн, крім України:

if ($_SERVER['HTTP_GEOIP_COUNTRY_CODE'] != 'UA' && !empty($_POST)) {
    die('Access denied');
}
Зміст

    Коментарі

    MaxQNEI
    Питання наступне. А як дізнатися місто за IP якщо запит прийшов через мобільну мережу (Vodafone, Lifecell, ...). MaxMind, Google GeoIP кажуть що це Київ хоча запити йдуть з Черкас, Львів, Чернгів.
    verliber
    Нажаль, але коректно визначити місто, з якого робився запит, буде доволі складно навіть для адрес інтернет-провайдерів. Ви можете спробувати скористатись платною версією бази даних https://www.maxmind.com/en/geoip2-databases , але коректність визначення міста для адрес мобільних операторів, скоріш за все, буде дуже низька.
    MaxQNEI
    Плак плак. =)
    Велике ДЯКУЮ!
    rudenko
    Тільки оператор знає в якому місті і кому видається IP адреса, всі бази які є в інтернет, в тому числі і MaxMind побудовані на відкритих даних і визначають місто по даним, які вказані во WHOIS для блока IP адрес.
    rudenko
    Якщо необхідно блокувати POST запити з будь-якої крахни, окрім України, то використовуйте код:

    if ($_SERVER['HTTP_GEOIP_COUNTRY_CODE'] != 'UA' && !empty($_POST)) {
    die('Русский военный корабль ...');
    }