IP Tool — База данных IP адресов

в 8:26, , рубрики: geo, IP, php

Долгое время я пользовался библиотекой SxGeo от zapimir. И до недавнего времени меня всё устраивало. Устраивало до тех пор, пока не было необходимости добавлять в БД свои данные.

Не найдя в интернете упаковщика данных от SxGeo и не найдя в себе силы требовать нужный мне функционал от разработчика, было принято решение писать свой костыль. Хотя на это решение повлиял и ещё 2 недостатка используемой библиотеки:

  • ограничение по количеству справочников;
  • невозможность узнать интервал адресов, в который входит искомый адрес;
  • отсутствие пакета в packagist.

Собственно, делюсь с вами своей разработкой.

Отличия между прототипом и моим решением:

  • IPTool — это всего лишь инструмент для создания базы данных и поиска в ней, в то время, как проект SxGeo — проект, предоставляющий не только инструментарий, но и сами базы данных;
  • База данных IPTool занимает больше места (т.к. первый адрес диапазона хранится полностью и занимает 4 байта, в то время, как в SxGeo только 3 байта);
  • IPTool имеет только один режим — чтение данных с диска (Режим подгрузки базы в память — в планах);
  • Помимо данных, IPTool возвращает диапазон IP адресов, в который входит искомый адрес;
  • IPTool предусматривает методы получения данных из справочников (всех или по порядковому номеру);
  • В базе данных IPTool предусмотрена возможность лицензирования самой базы данных;
  • IPTool легко устанавливается с помощью Composer;

Использование

Инициализация IP Tool

/* Путь к базе данных - /path/to/iptool.database */
$iptool = new DdrvIptoolIptool('/path/to/iptool.database');

Получение информации о базе данных

print_r($iptool->about());

Array
(
    [created] => 1507199627
    [author] => Anonymous Author
    [license] => MIT
    [networks] => Array
        (
            [count] => 276148
            [data] => Array
                (
                    [country] => Array
                        (
                            [0] => code
                            [1] => name
                        )
                )
        )
)

Поиск информации об IP адресе

print_r($iptool->find('81.32.17.89'));

Array
(
    [network] => Array
        (
            [0] => 81.32.0.0
            [1] => 81.48.0.0
        )
    [data] => Array
        (
            [country] => Array
                (
                    [code] => es
                    [name] => Spain
                )
        )
)

Получить все элементы справочника

print_r($iptool->getRegister('country'));

Array
(
    [1] => Array
        (
            [code] => cn
            [name] => China
        )
    [2] => Array
        (
            [code] => es
            [name] => Spain
        )
...
    [N] => Array
        (
            [code] => jp
            [name] => Japan
        )
)

Получение элемента справочника по его порядковому номеру

print_r($iptool->getRegister('country',2));

Array
    (
        [code] => cn
        [name] => China
    )
)

Процесс создания БД более трудоёмкий, но он описан с документации, которая доступна в репозитории и в wiki GitHub'а на русском и ломаном английском.

Автор: Ivan Dudarev

Источник

Поделиться

* - обязательные к заполнению поля