Поиск CIDR в базе данных с IP-адресом и принять закрытое совпадение - PullRequest
0 голосов
/ 03 мая 2018

Для моей системы я хотел бы определить местоположение небольшой страны. Итак, я нашел эту базу данных: https://github.com/datasets/geoip2

Существуют такие значения, как:

network,geoname_id,continent_code,continent_name,country_iso_code,country_name,is_anonymous_proxy,is_satellite_provider
"41.74.160.0/20","49518","AF","Africa","RW","Rwanda","0","0"
"41.77.160.0/22","49518","AF","Africa","RW","Rwanda","0","0"

Если я получаю IP-адрес, такой как 42.76.160.0, из моей функции ip getenv, как я могу найти этот ip с помощью php & pdo, чтобы найти правильное значение из базы данных.

EDIT:
Ну а пока я нашел решение:
Я преобразовал CIDR в обычный IP-адрес и выполняю поиск как:

            SELECT `country_iso_code`, `country_name`
            FROM `GeoIP`
            WHERE inet_aton(network) <= inet_aton(:ipadress)
            ORDER BY inet_aton(network) DESC
            LIMIT 1

На моем сервере загрузка контента увеличивается примерно на 50-75 мс, но это только для небольшой части моего сайта. (Настройка таблицы с уже примененным inet_aton не имеет большого значения)

...