Определение IP и местоположения посетителя сайта.

В сети по этому поводу довольно много материала, но я расскажу как это сделал я.
Понадобилось мне написать серверный back-end к одной программе (о ней я при случае расскажу позже), определающей ip клинта и его местоположение.
Задачи определить, сидит ли клиент через неанонимный прокси не было. Если кого-то интересует этот момент, рекомендую статью [Скачать PDF]
Итак, для определения IP нам понадобится собственно IP клиента, который нам обычно любезно предоставляет сервер в переменной $_SERVER['REMOTE_ADDR'] (о других случаях где можно если нужно искать IP — смотрите вышеуказанную статью).
Теперь о б определении местоположения по IP. Для сего действия необходима база геолокации (база, где сопоставлены диапазоны IP и страны, опционально города). Такие базы бывают платные/бесплатные, автономные (можно унести себе на сайт) и не автономные (сидят у кого-нибудь на сервере и выдают информацию по запросу) и т.д.
Для моей задачи нужна была автономная и бесплатная БД. Я воспользовался SxGeo: статья о ней на Хабре, Еще одна и сайт проекта.
Там все довольно просто. Скачиваем нужные базы, скрипт, который ими управляет, ставим на сайт. В комплекте есть небольшой пример.
Чтобы не тыкать по ссылкам, я собрал все в один архив, который можно скачать здесь
А теперь скрипт. Моя задача была небольшая, потому мне хватило просто изменить скрипт примера:

// Переделано из примера [8^12]
header('Content-type: text/plain; charset=utf8');
// Подключаем SxGeo.php класс
include("SxGeo.php");
// Создаем объект
// Первый параметр - имя файла с базой (используется оригинальная бинарная база SxGeo.dat)
// Второй параметр - режим работы:
// SXGEO_FILE (работа с файлом базы, режим по умолчанию);
// SXGEO_BATCH (пакетная обработка, увеличивает скорость при обработке множества IP за раз)
// SXGEO_MEMORY (кэширование БД в памяти, еще увеличивает скорость пакетной обработки, но требует больше памяти)
$SxGeo = new SxGeo('SxGeoCity.dat');
//$SxGeo = new SxGeo('SxGeoCity.dat', SXGEO_BATCH | SXGEO_MEMORY); // Самый производительный режим, если нужно обработать много IP за раз

1. Выдаем нужный заголовок, подключаем основной скрипт SxGeo.php
2. $ip = $_SERVER['REMOTE_ADDR']; — получаем IP клиента, и записываем информацию в переменную $ip
3. $add_info = $SxGeo->getCityFull($ip); // Вся информация о городе
$main_info = $SxGeo->get($ip); // Краткая информация о городе или код страны (если используется база SxGeo Country)
— передаем IP объекту SxGeo, записываем всю полученную информацию в переменные $main_info и $add_info (соответственно, основную и дополнительную информацию)
3. Выводим данные в удобном для дальнейшей обработки виде:
echo "IP|".$ip."n";
echo "ISO_CODE|".$main_info['country']['iso']."n";
echo "CITY|".$main_info['city']['name_en'].'|'.
$main_info['city']['lat'].'|'.
$main_info['city']['lon']."n";
echo "COUNTRY_INFO|".$add_info['country']['name_en'].'|'.
$add_info['country']['lat'].'|'.
$add_info['country']['lon']."n";
echo "REGION_INFO|".$add_info['region']['iso'].'|'.
$add_info['region']['name_en']."n";

Посмотреть, как работает скрипт, можно на HexProject, скачать его здесь, а пакет из необходимых баз, скрипта API SxGeo и вышеуказанного скрипта здесь


У меня сегодня, например, голландский IP
Продолжение

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/267126.html
Прокомментировать заметку можно по ссылке выше.

Раз уж вспомнили про говно, а народу интересно.

Даю анонс. Ждите новой информации про Семенова Сергея Сергеевича, депутата, а также его (надеюсь просто куратора, а не любовника, г-н(аря) Гостева) потому что если Семенов все-таки не просто курируемый, то у меня он будет вызывать рвоту. Потому что вкуса, стиля нет. И неразборчив в выборе партнеров.

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/266961.html
Прокомментировать заметку можно по ссылке выше.

Отрицательные персонажи для комикса про Гаджубасмена.

Когда-то в детстве такой сочиняли, но так и не сделали, а сегодня оттуда приснились два персонажа: Гос Нарко Кон, тролль и его друг, он же ездовое животное Конь Фискат — второй выглядит как поджарый жеребец с вечно стоящей от амфа …. антенной триколор-тв между ног, и постоянно выпученными глазами. А Гос Н.К. похож на толстого зеленого дезоморфинового наркомана в последней стадии пиздецомы, но он не дохнет, и сзади у него крокодилий хвост.
Постоянно ходит в паб города Енотослав, где так и представляется, на манер или Бонда, или просто чела, решившего сверкнуть своей должностью:
— Меня зовут Лена, а тебя как?
— Гос Нарко Кон, тролль. Хотя можешь звать меня просто Госом.
А когда они нажираются, то садятся на Коня Фиската (который постоянно забывает в баре кредитку и пальто), быстро через Внепространство и Вселенскую Пустоту в постель 🙂
Нарисуйте Г.Н. Кон, тролля и коня его Фиската, мож и комикс сделаем.
Можно прямо в комменты постить.

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/266381.html
Прокомментировать заметку можно по ссылке выше.

Продолжая тему…

когда вдруг спросит подполковник
кого имел под буквой х
то я отвечу просто смело
конечно же це хомени

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/266220.html
Прокомментировать заметку можно по ссылке выше.

Таки дыбровый дневник

Завел все-таки, кому надо — вот он [info]blu4sezon@ljr

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/265880.html
Прокомментировать заметку можно по ссылке выше.

пирожок про Хуйло

зачем товарищ подполковник
вы мне пришили экстремизм
я президента уважаю
пишу его с заглавной х

Это перепост заметки из моего блога на LJ.ROSSIA.ORG
Оригинал находится здесь: http://lj.rossia.org/users/hex_laden/265495.html
Прокомментировать заметку можно по ссылке выше.