Довольно точно определяет города
Sypex Geo// 1. Скопировать SxGeo.php и SxGeoCity.dat (или другие базы) на сервер
// 2. Подключить файл SxGeo.php в свой скрипт, добавив строку
include("SxGeo.php");
// 3. Создать объект SxGeo
// $SxGeo = new SxGeo(); // Режим по умолчанию, файл бд SxGeo.dat
$SxGeo = new SxGeo('SxGeoCity.dat', SXGEO_BATCH | SXGEO_MEMORY); // Самый быстрый режим
// 4. Определяем город (SxGeo City, GeoLite City, IpGeoBase)
$SxGeo->get($ip); // возвращает информацию о городе, без названия региона и временной зоны
// $SxGeo->getCityFull($ip); (возвращает полную информацию о городе и регионе)