Вход Регистрация
Файл: vkolhoze.com/geo/example-geoip.php
Строк: 286
<?php
/*
 * @brief Получение страны, региона и города.
 *
 * Функция сначала использует класс IPGeoBase. Если IP не удалось найти в IPGeoBase, используется MaxMind GeoLite.
 * Для России и Украины названия города и региона возвращаются на русском языке.
 *
 * @param ip IP-адрес
 * @return в случае успеха массив array('country' => , 'region' => , 'city' => ), иначе - false
 */
function getGeoLocation($ip)
{
    global 
$arGeoCodes;

    
//GeoIP
    
require_once(dirname(__FILE__) . "/geo/geoip.inc");
    require_once(
dirname(__FILE__) . "/geo/geoipcity.inc"); //GeoLite City
    
require_once(dirname(__FILE__) . "/geo/geoipregionvars.php");
    require_once(
dirname(__FILE__) . "/geo/ipregionvars.ru.php"); //перезаписываем русскими названиями RU и UA

    //IpGeoBase
    
require_once(dirname(__FILE__) . "geo/ipgeobase.php");

    
$gi geoip_open(dirname(__FILE__) . "geo/GeoLiteCity.dat"GEOIP_STANDARD);

    
$gb = new IPGeoBase();

    
$country $region $city '';
    
$data $gb->getRecord($ip);
    if(
$data)
    {
        
/*foreach($data as &$v)
        {
            $v = iconv('windows-1251', 'utf-8', $v);
        }
        unset($v);*/
        
$country = !empty($data['cc']) ? $arGeoCodes[$data['cc']] : '';
        
$region = !empty($data['region']) ? $data['region'] : '';
        
$city = !empty($data['city']) ? $data['city'] : '';
    }

    if(!
in_array($data['cc'], array('RU''UA')))
    {
        
$record geoip_record_by_addr($gi$ip);

        if(
$record)
        {
            
$country = !empty($record->country_code) ? $arGeoCodes[$record->country_code] : '';
            
$region = isset($GEOIP_REGION_NAME[$record->country_code][$record->region]) ? $GEOIP_REGION_NAME[$record->country_code][$record->region] : $record->region;
            
$city $record->city;
            
geoip_close($gi);
        }
    }

    if(
$country)
    {
        return array(
'country' => $country'region' => $region'city' => $city);
    }
    else
    {
        return 
false;
    }

}

$arGeoCodes = array(
    
'AU' => 'Австралия',
    
'AT' => 'Австрия',
    
'AZ' => 'Азербайджан',
    
'AX' => 'Аландские острова',
    
'AL' => 'Албания',
    
'DZ' => 'Алжир',
    
'VI' => 'Американские Виргинские острова',
    
'AS' => 'Американское Самоа',
    
'AI' => 'Ангилья',
    
'AO' => 'Ангола',
    
'AD' => 'Андорра',
    
'AQ' => 'Антарктида',
    
'AG' => 'Антигуа и Барбуда',
    
'AR' => 'Аргентина',
    
'AM' => 'Армения',
    
'AW' => 'Аруба',
    
'AF' => 'Афганистан',
    
'BS' => 'Багамы',
    
'BD' => 'Бангладеш',
    
'BB' => 'Барбадос',
    
'BH' => 'Бахрейн',
    
'BZ' => 'Белиз',
    
'BY' => 'Белоруссия',
    
'BE' => 'Бельгия',
    
'BJ' => 'Бенин',
    
'BM' => 'Бермуды',
    
'BG' => 'Болгария',
    
'BO' => 'Боливия',
    
'BQ' => 'Бонэйр, Синт-Эстатиус и Саба',
    
'BA' => 'Босния и Герцеговина',
    
'BW' => 'Ботсвана',
    
'BR' => 'Бразилия',
    
'IO' => 'Британская территория в Индийском океане',
    
'VG' => 'Британские Виргинские острова',
    
'BN' => 'Бруней',
    
'BF' => 'Буркина-Фасо',
    
'BI' => 'Бурунди',
    
'BT' => 'Бутан',
    
'VU' => 'Вануату',
    
'VA' => 'Ватикан',
    
'GB' => 'Великобритания',
    
'HU' => 'Венгрия',
    
'VE' => 'Венесуэла',
    
'UM' => 'Внешние малые острова (США)',
    
'TL' => 'Восточный Тимор',
    
'VN' => 'Вьетнам',
    
'GA' => 'Габон',
    
'HT' => 'Гаити',
    
'GY' => 'Гайана',
    
'GM' => 'Гамбия',
    
'GH' => 'Гана',
    
'GP' => 'Гваделупа',
    
'GT' => 'Гватемала',
    
'GF' => 'Гвиана',
    
'GN' => 'Гвинея',
    
'GW' => 'Гвинея-Бисау',
    
'DE' => 'Германия',
    
'GG' => 'Гернси',
    
'GI' => 'Гибралтар',
    
'HN' => 'Гондурас',
    
'HK' => 'Гонконг',
    
'GD' => 'Гренада',
    
'GL' => 'Гренландия',
    
'GR' => 'Греция',
    
'GE' => 'Грузия',
    
'GU' => 'Гуам',
    
'DK' => 'Дания',
    
'JE' => 'Джерси',
    
'DJ' => 'Джибути',
    
'DM' => 'Доминика',
    
'DO' => 'Доминиканская Республика',
    
'CD' => 'ДР Конго',
    
'EU' => 'Европейский союз',
    
'EG' => 'Египет',
    
'ZM' => 'Замбия',
    
'EH' => 'Западная Сахара',
    
'ZW' => 'Зимбабве',
    
'IL' => 'Израиль',
    
'IN' => 'Индия',
    
'ID' => 'Индонезия',
    
'JO' => 'Иордания',
    
'IQ' => 'Ирак',
    
'IR' => 'Иран',
    
'IE' => 'Ирландия',
    
'IS' => 'Исландия',
    
'ES' => 'Испания',
    
'IT' => 'Италия',
    
'YE' => 'Йемен',
    
'CV' => 'Кабо-Верде',
    
'KZ' => 'Казахстан',
    
'KY' => 'Каймановы острова',
    
'KH' => 'Камбоджа',
    
'CM' => 'Камерун',
    
'CA' => 'Канада',
    
'QA' => 'Катар',
    
'KE' => 'Кения',
    
'CY' => 'Кипр',
    
'KG' => 'Киргизия',
    
'KI' => 'Кирибати',
    
'TW' => 'Китайская Республика',
    
'KP' => 'КНДР',
    
'CN' => 'КНР',
    
'CC' => 'Кокосовые острова',
    
'CO' => 'Колумбия',
    
'KM' => 'Коморы',
    
'CR' => 'Коста-Рика',
    
'CI' => 'Кот-д’Ивуар',
    
'CU' => 'Куба',
    
'KW' => 'Кувейт',
    
'CW' => 'Кюрасао',
    
'LA' => 'Лаос',
    
'LV' => 'Латвия',
    
'LS' => 'Лесото',
    
'LR' => 'Либерия',
    
'LB' => 'Ливан',
    
'LY' => 'Ливия',
    
'LT' => 'Литва',
    
'LI' => 'Лихтенштейн',
    
'LU' => 'Люксембург',
    
'MU' => 'Маврикий',
    
'MR' => 'Мавритания',
    
'MG' => 'Мадагаскар',
    
'YT' => 'Майотта',
    
'MO' => 'Макао',
    
'MK' => 'Македония',
    
'MW' => 'Малави',
    
'MY' => 'Малайзия',
    
'ML' => 'Мали',
    
'MV' => 'Мальдивы',
    
'MT' => 'Мальта',
    
'MA' => 'Марокко',
    
'MQ' => 'Мартиника',
    
'MH' => 'Маршалловы Острова',
    
'MX' => 'Мексика',
    
'FM' => 'Микронезия',
    
'MZ' => 'Мозамбик',
    
'MD' => 'Молдавия',
    
'MC' => 'Монако',
    
'MN' => 'Монголия',
    
'MS' => 'Монтсеррат',
    
'MM' => 'Мьянма',
    
'NA' => 'Намибия',
    
'NR' => 'Науру',
    
'NP' => 'Непал',
    
'NE' => 'Нигер',
    
'NG' => 'Нигерия',
    
'NL' => 'Нидерланды',
    
'NI' => 'Никарагуа',
    
'NU' => 'Ниуэ',
    
'NZ' => 'Новая Зеландия',
    
'NC' => 'Новая Каледония',
    
'NO' => 'Норвегия',
    
'AE' => 'ОАЭ',
    
'OM' => 'Оман',
    
'BV' => 'Остров Буве',
    
'IM' => 'Остров Мэн',
    
'CK' => 'Острова Кука',
    
'NF' => 'Остров Норфолк',
    
'CX' => 'Остров Рождества',
    
'PN' => 'Острова Питкэрн',
    
'SH' => 'Острова Святой Елены, Вознесения и Тристан-да-Кунья',
    
'PK' => 'Пакистан',
    
'PW' => 'Палау',
    
'PS' => 'Палестинская национальная администрация',
    
'PA' => 'Панама',
    
'PG' => 'Папуа — Новая Гвинея',
    
'PY' => 'Парагвай',
    
'PE' => 'Перу',
    
'PL' => 'Польша',
    
'PT' => 'Португалия',
    
'PR' => 'Пуэрто-Рико',
    
'CG' => 'Республика Конго',
    
'KR' => 'Республика Корея',
    
'RE' => 'Реюньон',
    
'RU' => 'Россия',
    
'RW' => 'Руанда',
    
'RO' => 'Румыния',
    
'SV' => 'Сальвадор',
    
'WS' => 'Самоа',
    
'SM' => 'Сан-Марино',
    
'ST' => 'Сан-Томе и Принсипи',
    
'SA' => 'Саудовская Аравия',
    
'SZ' => 'Свазиленд',
    
'MP' => 'Северные Марианские острова',
    
'SC' => 'Сейшельские Острова',
    
'BL' => 'Сен-Бартелеми',
    
'MF' => 'Сен-Мартен',
    
'PM' => 'Сен-Пьер и Микелон',
    
'SN' => 'Сенегал',
    
'VC' => 'Сент-Винсент и Гренадины',
    
'KN' => 'Сент-Китс и Невис',
    
'LC' => 'Сент-Люсия',
    
'RS' => 'Сербия',
    
'SG' => 'Сингапур',
    
'SX' => 'Синт-Мартен',
    
'SY' => 'Сирия',
    
'SK' => 'Словакия',
    
'SI' => 'Словения',
    
'SB' => 'Соломоновы Острова',
    
'SO' => 'Сомали',
    
'SD' => 'Судан',
    
'SU' => 'СССР',
    
'SR' => 'Суринам',
    
'US' => 'США',
    
'SL' => 'Сьерра-Леоне',
    
'TJ' => 'Таджикистан',
    
'TH' => 'Таиланд',
    
'TZ' => 'Танзания',
    
'TC' => 'Тёркс и Кайкос',
    
'TG' => 'Того',
    
'TK' => 'Токелау',
    
'TO' => 'Тонга',
    
'TT' => 'Тринидад и Тобаго',
    
'TV' => 'Тувалу',
    
'TN' => 'Тунис',
    
'TM' => 'Туркмения',
    
'TR' => 'Турция',
    
'UG' => 'Уганда',
    
'UZ' => 'Узбекистан',
    
'UA' => 'Украина',
    
'WF' => 'Уоллис и Футуна',
    
'UY' => 'Уругвай',
    
'FO' => 'Фарерские острова',
    
'FJ' => 'Фиджи',
    
'PH' => 'Филиппины',
    
'FI' => 'Финляндия',
    
'FK' => 'Фолклендские острова',
    
'FR' => 'Франция',
    
'PF' => 'Французская Полинезия',
    
'TF' => 'Французские Южные и Антарктические Территории',
    
'HM' => 'Херд и Макдональд',
    
'HR' => 'Хорватия',
    
'CF' => 'ЦАР',
    
'TD' => 'Чад',
    
'ME' => 'Черногория',
    
'CZ' => 'Чехия',
    
'CL' => 'Чили',
    
'CH' => 'Швейцария',
    
'SE' => 'Швеция',
    
'SJ' => 'Шпицберген и Ян-Майен',
    
'LK' => 'Шри-Ланка',
    
'EC' => 'Эквадор',
    
'GQ' => 'Экваториальная Гвинея',
    
'ER' => 'Эритрея',
    
'EE' => 'Эстония',
    
'ET' => 'Эфиопия',
    
'ZA' => 'ЮАР',
    
'GS' => 'Южная Георгия и Южные Сандвичевы острова',
    
'SS' => 'Южный Судан',
    
'JM' => 'Ямайка',
    
'JP' => 'Япония'
);

$arGeoCodesEN = array(
    
'AF' =>  'Afghanistan',
    
'AX' =>  'Aland Islands',
    
'AL' =>  'Albania',
    
'DZ' =>  'Algeria',
    
'AS' =>  'American Samoa',
    
'AD' =>  'Andorra',
    
'AO' =>  'Angola',
    
'AI' =>  'Anguilla',
    
'AQ' =>  'Antarctica',
    
'AG' =>  'Antigua and Barbuda',
    
'AR' =>  'Argentina',
    
'AM' =>  'Armenia',
    
'AW' =>  'Aruba',
    
'AU' =>  'Australia',
    
'AT' =>  'Austria',
    
'AZ' =>  'Azerbaijan',
    
'BS' =>  'Bahamas',
    
'BH' =>  'Bahrain',
    
'BD' =>  'Bangladesh',
    
'BB' =>  'Barbados',
    
'BY' =>  'Belarus',
    
'BE' =>  'Belgium',
    
'BZ' =>  'Belize',
    
'BJ' =>  'Benin',
    
'BM' =>  'Bermuda',
    
'BT' =>  'Bhutan',
    
'BO' =>  'Bolivia, Plurinational State of',
    
'BQ' =>  'Bonaire, Sint Eustatius and Saba',
    
'BA' =>  'Bosnia and Herzegovina',
    
'BW' =>  'Botswana',
    
'BV' =>  'Bouvet Island',
    
'BR' =>  'Brazil',
    
'IO' =>  'British Indian Ocean Territory',
    
'BN' =>  'Brunei Darussalam',
    
'BG' =>  'Bulgaria',
    
'BF' =>  'Burkina Faso',
    
'BI' =>  'Burundi',
    
'KH' =>  'Cambodia',
    
'CM' =>  'Cameroon',
    
'CA' =>  'Canada',
    
'CV' =>  'Cape Verde',
    
'KY' =>  'Cayman Islands',
    
'CF' =>  'Central African Republic',
    
'TD' =>  'Chad',
    
'CL' =>  'Chile',
    
'CN' =>  'China',
    
'CX' =>  'Christmas Island',
    
'CC' =>  'Cocos (Keeling) Islands',
    
'CO' =>  'Colombia',
    
'KM' =>  'Comoros',
    
'CG' =>  'Congo',
    
'CD' =>  'Congo, the Democratic Republic of the',
    
'CK' =>  'Cook Islands',
    
'CR' =>  'Costa Rica',
    
'CI' =>  'Cote d'Ivoire',
    '
HR' =>  'Croatia',
    '
CU' =>  'Cuba',
    '
CW' =>  'Curacao',
    '
CY' =>  'Cyprus',
    '
CZ' =>  'Czech Republic',
    '
DK' =>  'Denmark',
    '
DJ' =>  'Djibouti',
    '
DM' =>  'Dominica',
    '
DO' =>  'Dominican Republic',
    '
EC' =>  'Ecuador',
    '
EG' =>  'Egypt',
    '
SV' =>  'El Salvador',
    '
GQ' =>  'Equatorial Guinea',
    '
ER' =>  'Eritrea',
    '
EE' =>  'Estonia',
    '
ET' =>  'Ethiopia',
    '
FK' =>  'Falkland Islands (Malvinas)',
    '
FO' =>  'Faroe Islands',
    '
FJ' =>  'Fiji',
    '
FI' =>  'Finland',
    '
FR' =>  'France',
    '
GF' =>  'French Guiana',
    '
PF' =>  'French Polynesia',
    '
TF' =>  'French Southern Territories',
    '
GA' =>  'Gabon',
    '
GM' =>  'Gambia',
    '
GE' =>  'Georgia',
    '
DE' =>  'Germany',
    '
GH' =>  'Ghana',
    '
GI' =>  'Gibraltar',
    '
GR' =>  'Greece',
    '
GL' =>  'Greenland',
    '
GD' =>  'Grenada',
    '
GP' =>  'Guadeloupe',
    '
GU' =>  'Guam',
    '
GT' =>  'Guatemala',
    '
GG' =>  'Guernsey',
    '
GN' =>  'Guinea',
    '
GW' =>  'Guinea-Bissau',
    '
GY' =>  'Guyana',
    '
HT' =>  'Haiti',
    '
HM' =>  'Heard Island and McDonald Islands',
    '
VA' =>  'Holy See (Vatican City State)',
    '
HN' =>  'Honduras',
    '
HK' =>  'Hong Kong',
    '
HU' =>  'Hungary',
    '
IS' =>  'Iceland',
    '
IN' =>  'India',
    '
ID' =>  'Indonesia',
    '
IR' =>  'IranIslamic Republic of',
    '
IQ' =>  'Iraq',
    '
IE' =>  'Ireland',
    '
IM' =>  'Isle of Man',
    '
IL' =>  'Israel',
    '
IT' =>  'Italy',
    '
JM' =>  'Jamaica',
    '
JP' =>  'Japan',
    '
JE' =>  'Jersey',
    '
JO' =>  'Jordan',
    '
KZ' =>  'Kazakhstan',
    '
KE' =>  'Kenya',
    '
KI' =>  'Kiribati',
    '
KP' =>  'KoreaDemocratic People's Republic of',
    
'KR' =>  'Korea, Republic of',
    
'KW' =>  'Kuwait',
    
'KG' =>  'Kyrgyzstan',
    
'LA' =>  'Lao People's Democratic Republic',
    '
LV' =>  'Latvia',
    '
LB' =>  'Lebanon',
    '
LS' =>  'Lesotho',
    '
LR' =>  'Liberia',
    '
LY' =>  'Libya',
    '
LI' =>  'Liechtenstein',
    '
LT' =>  'Lithuania',
    '
LU' =>  'Luxembourg',
    '
MO' =>  'Macao',
    '
MK' =>  'MacedoniaThe Former Yugoslav Republic of',
    '
MG' =>  'Madagascar',
    '
MW' =>  'Malawi',
    '
MY' =>  'Malaysia',
    '
MV' =>  'Maldives',
    '
ML' =>  'Mali',
    '
MT' =>  'Malta',
    '
MH' =>  'Marshall Islands',
    '
MQ' =>  'Martinique',
    '
MR' =>  'Mauritania',
    '
MU' =>  'Mauritius',
    '
YT' =>  'Mayotte',
    '
MX' =>  'Mexico',
    '
FM' =>  'MicronesiaFederated States of',
    '
MD' =>  'MoldovaRepublic of',
    '
MC' =>  'Monaco',
    '
MN' =>  'Mongolia',
    '
ME' =>  'Montenegro',
    '
MS' =>  'Montserrat',
    '
MA' =>  'Morocco',
    '
MZ' =>  'Mozambique',
    '
MM' =>  'Myanmar',
    '
NA' =>  'Namibia',
    '
NR' =>  'Nauru',
    '
NP' =>  'Nepal',
    '
NL' =>  'Netherlands',
    '
NC' =>  'New Caledonia',
    '
NZ' =>  'New Zealand',
    '
NI' =>  'Nicaragua',
    '
NE' =>  'Niger',
    '
NG' =>  'Nigeria',
    '
NU' =>  'Niue',
    '
NF' =>  'Norfolk Island',
    '
MP' =>  'Northern Mariana Islands',
    '
NO' =>  'Norway',
    '
OM' =>  'Oman',
    '
PK' =>  'Pakistan',
    '
PW' =>  'Palau',
    '
PS' =>  'PalestineState of',
    '
PA' =>  'Panama',
    '
PG' =>  'Papua New Guinea',
    '
PY' =>  'Paraguay',
    '
PE' =>  'Peru',
    '
PH' =>  'Philippines',
    '
PN' =>  'Pitcairn',
    '
PL' =>  'Poland',
    '
PT' =>  'Portugal',
    '
PR' =>  'Puerto Rico',
    '
QA' =>  'Qatar',
    '
RE' =>  'Reunion',
    '
RO' =>  'Romania',
    '
RU' =>  'Russian Federation',
    '
RW' =>  'Rwanda',
    '
BL' =>  'Saint Barthelemy',
    '
SH' =>  'Saint HelenaAscension and Tristan da Cunha',
    '
KN' =>  'Saint Kitts and Nevis',
    '
LC' =>  'Saint Lucia',
    '
MF' =>  'Saint Martin (French part)',
    '
PM' =>  'Saint Pierre and Miquelon',
    '
VC' =>  'Saint Vincent and the Grenadines',
    '
WS' =>  'Samoa',
    '
SM' =>  'San Marino',
    '
ST' =>  'Sao Tome and Principe',
    '
SA' =>  'Saudi Arabia',
    '
SN' =>  'Senegal',
    '
RS' =>  'Serbia',
    '
SC' =>  'Seychelles',
    '
SL' =>  'Sierra Leone',
    '
SG' =>  'Singapore',
    '
SX' =>  'Sint Maarten (Dutch part)',
    '
SK' =>  'Slovakia',
    '
SI' =>  'Slovenia',
    '
SB' =>  'Solomon Islands',
    '
SO' =>  'Somalia',
    '
ZA' =>  'South Africa',
    '
GS' =>  'South Georgia and the South Sandwich Islands',
    '
SS' =>  'South Sudan',
    '
ES' =>  'Spain',
    '
LK' =>  'Sri Lanka',
    '
SD' =>  'Sudan',
    '
SR' =>  'Suriname',
    '
SJ' =>  'Svalbard and Jan Mayen',
    '
SZ' =>  'Swaziland',
    '
SE' =>  'Sweden',
    '
CH' =>  'Switzerland',
    '
SY' =>  'Syrian Arab Republic',
    '
TW' =>  'TaiwanProvince of China',
    '
TJ' =>  'Tajikistan',
    '
TZ' =>  'TanzaniaUnited Republic of',
    '
TH' =>  'Thailand',
    '
TL' =>  'Timor-Leste',
    '
TG' =>  'Togo',
    '
TK' =>  'Tokelau',
    '
TO' =>  'Tonga',
    '
TT' =>  'Trinidad and Tobago',
    '
TN' =>  'Tunisia',
    '
TR' =>  'Turkey',
    '
TM' =>  'Turkmenistan',
    '
TC' =>  'Turks and Caicos Islands',
    '
TV' =>  'Tuvalu',
    '
UG' =>  'Uganda',
    '
UA' =>  'Ukraine',
    '
AE' =>  'United Arab Emirates',
    '
GB' =>  'United Kingdom',
    '
US' =>  'United States',
    '
UM' =>  'United States Minor Outlying Islands',
    '
UY' =>  'Uruguay',
    '
UZ' =>  'Uzbekistan',
    '
VU' =>  'Vanuatu',
    '
VE' =>  'VenezuelaBolivarian Republic of',
    '
VN' =>  'Viet Nam',
    '
VG' =>  'Virgin IslandsBritish',
    '
VI' =>  'Virgin IslandsU.S.',
    '
WF' =>  'Wallis and Futuna',
    '
EH' =>  'Western Sahara',
    '
YE' =>  'Yemen',
    '
ZM' =>  'Zambia',
    '
ZW' =>  'Zimbabwe'
);

header('
Content-typetext/html;charset=windows-1251');

var_dump(getGeoLocation('
91.230.211.234'));
/*
 array(3) {
  ["country"]=>
  string(6) "Россия"
  ["region"]=>
  string(17) "Красноярский край"
  ["city"]=>
  string(10) "Красноярск"
}
 */

var_dump(getGeoLocation('
173.194.71.100'));
Онлайн: 1
Реклама