Получать информацию по IP мы будем с этого сайта.
function getCountryByIp($ipAddress) { $ipDetail=array(); $f = file_get_contents("http://api.hostip.info/?ip=".$ipAddress); //Получаем название города preg_match("@<Hostip>(\s)*<gml:name>(.*?)</gml:name>@si", $f, $city); $ipDetail['city'] = $city[2]; //Получаем название страны preg_match("@<countryName>(.*?)</countryName>@si", $f, $country); $ipDetail['country'] = $country[1]; //Получаем код страны preg_match("@<countryAbbrev>(.*?)</countryAbbrev>@si", $f, $countryCode); $ipDetail['countryCode'] = $countryCode[1]; return $ipDetail; }
Я думаю код в объяснениях не нуждается. Функция будет возвращать такой массив:
Array ( [city] => cityName [country] => countryName [country_code] => Code )
Теперь посмотрим работу функции getCountryByIp() в деле.
$ipDetail = getCountryByIp('195.114.140.105'); echo "Страна: ".$ipDetail['country']."<br />"; echo "Город: ".$ipDetail['city']."<br />"; echo "Код страны: ".$ipDetail['countryCode']."<br />";
По использованному выше будет следующая информация:
Страна: FRANCE
Город: Nice
Код страны: FR
- 10 регулярных выражений для web-разработчиков
- 3 скрипта созданные от скуки
- Регер аккаунтов 100zakladok.ru
- Пример работы с CListView в Yii
- Создаем индикатор сложности пароля
Теги: PHP, Полезные скрипты
Супер! На редкость понятная статья. За 2 минуты настроил у себя на сервере. Респект автору. Всё понятно и чётко
Reply
А вот с российскими IP проблема на этом сервисе — не определяют. «… actually we haven’t a clue.»
Reply
У меня вот что определяет: 66.249.66.233 — (Private A * не определ * XX *
, т.е. ничего. И так по всем ip
, google и yandex не исключение. Что не так…
Reply
Челябинск UTEL к сожалению не определил
Reply
Спасибо, клево, я думал надо свои базы где то находить, и по ним работать, про hostip не знал 🙂
Reply
А вот нихера и не работает Ваш код — фуфло, город не определяет
Reply
Max Reply:
Декабрь 7, 2012 at 18:40
Прежде, чем говорить, что код нерабочий посмотри на дату поста. В 2009 году все работало. За 3 года могло многое измениться.
Reply
нужно исправить
preg_match(«@(\s)*(.*?)@si», $f, $city);
$ipDetail[‘city’] = $city[2];
на preg_match(«@(\s)*(.*?)@si», $f, $city);
$ipDetail[‘city’] = $city[2];
Тогда работать будет и еще, странная у вас антиспам система, одно и тоже выражение предлагает мне
Reply
Мне бы такое на Delphi… Кто нить знает как реализовать (главное, что бы страну определял, остальное наважно)
Reply
Много айпи не определят….не пойдет
Reply