Некоторое время назад я рассказывал об использовании Яндекс. Карт и сервиса IPLoc, который позволяет определить географические координаты посетителя по его IP адресу. К сожалению, этот сервис сейчас практически все время недоступен. И эта ситуация наглядно показывает, насколько опасно полностью полагаться на сторонние сервисы. Конечно, проблемы бывают у всех. Но если не работает собственный ресурс, можно попытаться что-то сделать, а тут остается только ждать. Кроме того, есть ещё одна отрицательная сторона использования сторонних сервисов – время отклика. На отправку запроса и получение ответа (даже очень короткого) уйдет некоторое время, и оно наверняка будет больше чем обращение к локальным ресурсам. В общем, глядя на сложившуюся ситуацию, я начал искать локальную альтернативу IPLoc, т. е. готовую базу данных. Т. к. платные варианты меня не устраивали, то искать пришлось довольно долго В результате я остановился на сервисе WIPmania. com. Он предоставляет и API для получения данных, и базу данных. Правда полноценной заменой IPLoc его считать нельзя, т. к. он позволяет определить только страну посетителя, а географические координаты (широта и долгота) отсутствуют. Тем не менее, более полные базы я видел только в платных вариантах. Ограничения WIPmania. Версия базы данных для скачивания обновляется один раз в два месяца. Если вы используете API, то всегда работаете с самой новой версией, но существует ограничение на количество запросов в месяц. Т. к. использование API практически не отличается от IPLoc, в этой статье я расскажу только о работе с БД. 1) Загружаем базу данных с официального сайта, тут же можно скачать архив с флагами стран. Я выбрал архив с SQL версией базы. Нам нужны 2 файла worldip. sql и worldip. lands.
ru. sql. Создаем базу данных и импортируем их. В результате будут созданы две таблицы: worldip_land и worldip В первой таблице хранятся диапазоны IP адресов и двухбуквенные коды соответствующих им стран. Во второй таблице – двухбуквенные коды и полные названия стран. Я использовал таблицу с русскими названиями, но в дистрибутив также входят переводы на английский, немецкий и испанский. Есть несколько нюансов при импортировании таблиц. Во-первых, импортирование я выполнял с помощью команды mysql –user=имя –password=пароль название_базы Во-вторых, практически весь Файл worldip. sql занимает один SQL запрос, размер которого больше 1 МБ. И при попытке импорта возникала ошибка «MySQL server has gone away». Чтобы её исправить добавьте в конфигурационный файл (my. ini) строку max_allowed_packet = 4M (в раздел [mysqld]). 2) Получение данных Как не сложно догадаться, в большинстве случаев нам нужно будет определять название страны по известному IP. Кроме того, для того, чтобы показать флаг страны, нужен её двухбуквенный код. Выполнить эту операцию можно с помощью следующего SQL запроса.