This repository was archived by the owner on Apr 23, 2020. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
ExampleGeolite2City.RU
Ivan Dudarev edited this page Oct 9, 2017
·
4 revisions
Документация / Примеры / Пример создания БД используя данные GeoLite2 City
Язык: EN RU
<?php
/* Используем директорию для хранения временных файлов. У скрипта должны быть права на запись в эту директорию. */
$tmpDir = __DIR__.DIRECTORY_SEPARATOR.'tmp';
/* Инициализируем класс Converter. */
$converter = new \Ddrv\Iptool\Converter($tmpDir);
/* Указываем путь для сохранения БД. Скрипт должен иметь права на запись этого файла. */
$dbFile = __DIR__.DIRECTORY_SEPARATOR.'data'.DIRECTORY_SEPARATOR.'iptool.geo.city.dat';
/* УРЛ для скачивания архива.*/
$url = 'http://geolite.maxmind.com/download/geoip/database/GeoLiteCity_CSV/GeoLiteCity-latest.zip';
/* Имя временного файла. */
$tmpFile = $tmpDir . DIRECTORY_SEPARATOR . 'geolite2city.zip';
/* Скачиваем архив. */
copy($url,$tmpFile);
/* Ищем в архиве путь к нужным файлам. */
$zip = new ZipArchive();
if ($zip->open($tmpFile) !== true) die;
$i = -1;
$zipPath = null;
do {
$i++;
$csv = $zip->getNameIndex($i);
preg_match('/(?<file>(?<zipPath>.*)\/GeoLiteCity\-Blocks\.csv)$/ui', $csv, $m);
} while ($i < $zip->numFiles && empty($m['file']));
$zipPath = $m['zipPath'];
$zip->close();
/* Запоминаем в переменные пути к нужным CSV файлам. */
$locations = 'zip://' . $tmpFile . '#'.$zipPath.DIRECTORY_SEPARATOR.'GeoLiteCity-Location.csv';
$networks = 'zip://' . $tmpFile . '#' . $m['file'];
/* Устанавливаем инфорацию об авторе. */
$converter->setAuthor('Ivan Dudarev');
/* Указываем лицензию. */
$converter->setLicense('MIT');
/* Добавляем исходники в формате CSV. */
$converter->addCSV('locations',$locations,2);
$converter->addCSV('networks',$networks,2);
/* Описываем справочник Geo. */
$geo = array(
'geonames' => array(
'type' => 'int',
'column' => 0,
),
'country' => array(
'type' => 'string',
'column' => 1,
'transform' => 'low',
),
'region' => array(
'type' => 'string',
'column' => 2,
),
'city' => array(
'type' => 'string',
'column' => 3,
),
'latitude' => array(
'type' => 'double',
'column' => 5,
),
'longitude' => array(
'type' => 'double',
'column' => 6,
),
);
$converter->addRegister('geo','locations',0, $geo);
/* Описываем диапазоны. */
$data = array(
'geo' => 2,
);
$converter->addNetworks('networks', 'long', 0, 1, $data);
/* Компилируем БД. */
$converter->create($dbFile);
/* Удаляем временный файл */
unlink($tmpFile);
/* Получаем информацию о созданной БД */
$iptool = new \Ddrv\Iptool\Iptool($dbFile);
print_r($iptool->about());
/* Ищем в БД информацию по адресу */
print_r($iptool->find('95.215.84.0'));