| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140114111421143114411451146114711481149115011511152115311541155115611571158115911601161116211631164116511661167116811691170117111721173117411751176117711781179118011811182118311841185118611871188118911901191119211931194119511961197119811991200120112021203120412051206120712081209121012111212121312141215121612171218121912201221122212231224122512261227122812291230123112321233123412351236123712381239124012411242124312441245124612471248124912501251125212531254125512561257125812591260126112621263126412651266126712681269127012711272127312741275127612771278127912801281128212831284128512861287128812891290129112921293129412951296129712981299130013011302130313041305130613071308130913101311131213131314131513161317131813191320132113221323132413251326132713281329133013311332133313341335133613371338133913401341134213431344134513461347134813491350135113521353135413551356135713581359136013611362136313641365136613671368136913701371137213731374137513761377137813791380138113821383138413851386138713881389139013911392139313941395139613971398139914001401140214031404140514061407140814091410141114121413141414151416141714181419142014211422142314241425142614271428142914301431143214331434143514361437143814391440144114421443144414451446144714481449145014511452145314541455145614571458145914601461146214631464146514661467146814691470147114721473147414751476147714781479148014811482148314841485148614871488148914901491149214931494149514961497149814991500150115021503150415051506150715081509151015111512151315141515151615171518151915201521152215231524152515261527152815291530153115321533153415351536153715381539154015411542154315441545154615471548154915501551155215531554155515561557155815591560156115621563156415651566156715681569157015711572157315741575157615771578157915801581158215831584158515861587158815891590159115921593159415951596159715981599160016011602160316041605160616071608160916101611161216131614161516161617161816191620162116221623162416251626162716281629163016311632163316341635163616371638163916401641164216431644164516461647164816491650165116521653165416551656165716581659166016611662166316641665166616671668166916701671167216731674167516761677167816791680168116821683168416851686168716881689169016911692169316941695169616971698169917001701170217031704170517061707170817091710171117121713171417151716171717181719172017211722172317241725172617271728172917301731173217331734173517361737173817391740174117421743174417451746174717481749175017511752175317541755175617571758175917601761176217631764176517661767176817691770177117721773177417751776177717781779178017811782178317841785178617871788178917901791179217931794179517961797179817991800180118021803180418051806180718081809181018111812181318141815 |
- <?php
- /**
- * Geo IP class
- *
- * This class is a fork of GeoIP class from MaxMind LLC.
- *
- * @package WooCommerce\Classes
- * @version 2.4.0
- * @deprecated 3.4.0
- */
- if ( ! defined( 'ABSPATH' ) ) {
- exit;
- }
- /**
- * WC_Geo_IP Class.
- *
- * @deprecated 3.4.0
- */
- class WC_Geo_IP {
- const GEOIP_COUNTRY_BEGIN = 16776960;
- const GEOIP_STATE_BEGIN_REV0 = 16700000;
- const GEOIP_STATE_BEGIN_REV1 = 16000000;
- const GEOIP_MEMORY_CACHE = 1;
- const GEOIP_SHARED_MEMORY = 2;
- const STRUCTURE_INFO_MAX_SIZE = 20;
- const GEOIP_COUNTRY_EDITION = 1;
- const GEOIP_PROXY_EDITION = 8;
- const GEOIP_ASNUM_EDITION = 9;
- const GEOIP_NETSPEED_EDITION = 10;
- const GEOIP_REGION_EDITION_REV0 = 7;
- const GEOIP_REGION_EDITION_REV1 = 3;
- const GEOIP_CITY_EDITION_REV0 = 6;
- const GEOIP_CITY_EDITION_REV1 = 2;
- const GEOIP_ORG_EDITION = 5;
- const GEOIP_ISP_EDITION = 4;
- const SEGMENT_RECORD_LENGTH = 3;
- const STANDARD_RECORD_LENGTH = 3;
- const ORG_RECORD_LENGTH = 4;
- const GEOIP_SHM_KEY = 0x4f415401;
- const GEOIP_DOMAIN_EDITION = 11;
- const GEOIP_COUNTRY_EDITION_V6 = 12;
- const GEOIP_LOCATIONA_EDITION = 13;
- const GEOIP_ACCURACYRADIUS_EDITION = 14;
- const GEOIP_CITY_EDITION_REV1_V6 = 30;
- const GEOIP_CITY_EDITION_REV0_V6 = 31;
- const GEOIP_NETSPEED_EDITION_REV1 = 32;
- const GEOIP_NETSPEED_EDITION_REV1_V6 = 33;
- const GEOIP_USERTYPE_EDITION = 28;
- const GEOIP_USERTYPE_EDITION_V6 = 29;
- const GEOIP_ASNUM_EDITION_V6 = 21;
- const GEOIP_ISP_EDITION_V6 = 22;
- const GEOIP_ORG_EDITION_V6 = 23;
- const GEOIP_DOMAIN_EDITION_V6 = 24;
- /**
- * Flags.
- *
- * @var int
- */
- public $flags;
- /**
- * File handler.
- *
- * @var resource
- */
- public $filehandle;
- /**
- * Memory buffer.
- *
- * @var string
- */
- public $memory_buffer;
- /**
- * Database type.
- *
- * @var int
- */
- public $databaseType;
- /**
- * Database segments.
- *
- * @var int
- */
- public $databaseSegments;
- /**
- * Record length.
- *
- * @var int
- */
- public $record_length;
- /**
- * Shmid.
- *
- * @var string
- */
- public $shmid;
- /**
- * Two letters country codes.
- *
- * @var array
- */
- public $GEOIP_COUNTRY_CODES = array(
- '',
- 'AP',
- 'EU',
- 'AD',
- 'AE',
- 'AF',
- 'AG',
- 'AI',
- 'AL',
- 'AM',
- 'CW',
- 'AO',
- 'AQ',
- 'AR',
- 'AS',
- 'AT',
- 'AU',
- 'AW',
- 'AZ',
- 'BA',
- 'BB',
- 'BD',
- 'BE',
- 'BF',
- 'BG',
- 'BH',
- 'BI',
- 'BJ',
- 'BM',
- 'BN',
- 'BO',
- 'BR',
- 'BS',
- 'BT',
- 'BV',
- 'BW',
- 'BY',
- 'BZ',
- 'CA',
- 'CC',
- 'CD',
- 'CF',
- 'CG',
- 'CH',
- 'CI',
- 'CK',
- 'CL',
- 'CM',
- 'CN',
- 'CO',
- 'CR',
- 'CU',
- 'CV',
- 'CX',
- 'CY',
- 'CZ',
- 'DE',
- 'DJ',
- 'DK',
- 'DM',
- 'DO',
- 'DZ',
- 'EC',
- 'EE',
- 'EG',
- 'EH',
- 'ER',
- 'ES',
- 'ET',
- 'FI',
- 'FJ',
- 'FK',
- 'FM',
- 'FO',
- 'FR',
- 'SX',
- 'GA',
- 'GB',
- 'GD',
- 'GE',
- 'GF',
- 'GH',
- 'GI',
- 'GL',
- 'GM',
- 'GN',
- 'GP',
- 'GQ',
- 'GR',
- 'GS',
- 'GT',
- 'GU',
- 'GW',
- 'GY',
- 'HK',
- 'HM',
- 'HN',
- 'HR',
- 'HT',
- 'HU',
- 'ID',
- 'IE',
- 'IL',
- 'IN',
- 'IO',
- 'IQ',
- 'IR',
- 'IS',
- 'IT',
- 'JM',
- 'JO',
- 'JP',
- 'KE',
- 'KG',
- 'KH',
- 'KI',
- 'KM',
- 'KN',
- 'KP',
- 'KR',
- 'KW',
- 'KY',
- 'KZ',
- 'LA',
- 'LB',
- 'LC',
- 'LI',
- 'LK',
- 'LR',
- 'LS',
- 'LT',
- 'LU',
- 'LV',
- 'LY',
- 'MA',
- 'MC',
- 'MD',
- 'MG',
- 'MH',
- 'MK',
- 'ML',
- 'MM',
- 'MN',
- 'MO',
- 'MP',
- 'MQ',
- 'MR',
- 'MS',
- 'MT',
- 'MU',
- 'MV',
- 'MW',
- 'MX',
- 'MY',
- 'MZ',
- 'NA',
- 'NC',
- 'NE',
- 'NF',
- 'NG',
- 'NI',
- 'NL',
- 'NO',
- 'NP',
- 'NR',
- 'NU',
- 'NZ',
- 'OM',
- 'PA',
- 'PE',
- 'PF',
- 'PG',
- 'PH',
- 'PK',
- 'PL',
- 'PM',
- 'PN',
- 'PR',
- 'PS',
- 'PT',
- 'PW',
- 'PY',
- 'QA',
- 'RE',
- 'RO',
- 'RU',
- 'RW',
- 'SA',
- 'SB',
- 'SC',
- 'SD',
- 'SE',
- 'SG',
- 'SH',
- 'SI',
- 'SJ',
- 'SK',
- 'SL',
- 'SM',
- 'SN',
- 'SO',
- 'SR',
- 'ST',
- 'SV',
- 'SY',
- 'SZ',
- 'TC',
- 'TD',
- 'TF',
- 'TG',
- 'TH',
- 'TJ',
- 'TK',
- 'TM',
- 'TN',
- 'TO',
- 'TL',
- 'TR',
- 'TT',
- 'TV',
- 'TW',
- 'TZ',
- 'UA',
- 'UG',
- 'UM',
- 'US',
- 'UY',
- 'UZ',
- 'VA',
- 'VC',
- 'VE',
- 'VG',
- 'VI',
- 'VN',
- 'VU',
- 'WF',
- 'WS',
- 'YE',
- 'YT',
- 'RS',
- 'ZA',
- 'ZM',
- 'ME',
- 'ZW',
- 'A1',
- 'A2',
- 'O1',
- 'AX',
- 'GG',
- 'IM',
- 'JE',
- 'BL',
- 'MF',
- 'BQ',
- 'SS',
- 'O1',
- );
- /**
- * 3 letters country codes.
- *
- * @var array
- */
- public $GEOIP_COUNTRY_CODES3 = array(
- '',
- 'AP',
- 'EU',
- 'AND',
- 'ARE',
- 'AFG',
- 'ATG',
- 'AIA',
- 'ALB',
- 'ARM',
- 'CUW',
- 'AGO',
- 'ATA',
- 'ARG',
- 'ASM',
- 'AUT',
- 'AUS',
- 'ABW',
- 'AZE',
- 'BIH',
- 'BRB',
- 'BGD',
- 'BEL',
- 'BFA',
- 'BGR',
- 'BHR',
- 'BDI',
- 'BEN',
- 'BMU',
- 'BRN',
- 'BOL',
- 'BRA',
- 'BHS',
- 'BTN',
- 'BVT',
- 'BWA',
- 'BLR',
- 'BLZ',
- 'CAN',
- 'CCK',
- 'COD',
- 'CAF',
- 'COG',
- 'CHE',
- 'CIV',
- 'COK',
- 'CHL',
- 'CMR',
- 'CHN',
- 'COL',
- 'CRI',
- 'CUB',
- 'CPV',
- 'CXR',
- 'CYP',
- 'CZE',
- 'DEU',
- 'DJI',
- 'DNK',
- 'DMA',
- 'DOM',
- 'DZA',
- 'ECU',
- 'EST',
- 'EGY',
- 'ESH',
- 'ERI',
- 'ESP',
- 'ETH',
- 'FIN',
- 'FJI',
- 'FLK',
- 'FSM',
- 'FRO',
- 'FRA',
- 'SXM',
- 'GAB',
- 'GBR',
- 'GRD',
- 'GEO',
- 'GUF',
- 'GHA',
- 'GIB',
- 'GRL',
- 'GMB',
- 'GIN',
- 'GLP',
- 'GNQ',
- 'GRC',
- 'SGS',
- 'GTM',
- 'GUM',
- 'GNB',
- 'GUY',
- 'HKG',
- 'HMD',
- 'HND',
- 'HRV',
- 'HTI',
- 'HUN',
- 'IDN',
- 'IRL',
- 'ISR',
- 'IND',
- 'IOT',
- 'IRQ',
- 'IRN',
- 'ISL',
- 'ITA',
- 'JAM',
- 'JOR',
- 'JPN',
- 'KEN',
- 'KGZ',
- 'KHM',
- 'KIR',
- 'COM',
- 'KNA',
- 'PRK',
- 'KOR',
- 'KWT',
- 'CYM',
- 'KAZ',
- 'LAO',
- 'LBN',
- 'LCA',
- 'LIE',
- 'LKA',
- 'LBR',
- 'LSO',
- 'LTU',
- 'LUX',
- 'LVA',
- 'LBY',
- 'MAR',
- 'MCO',
- 'MDA',
- 'MDG',
- 'MHL',
- 'MKD',
- 'MLI',
- 'MMR',
- 'MNG',
- 'MAC',
- 'MNP',
- 'MTQ',
- 'MRT',
- 'MSR',
- 'MLT',
- 'MUS',
- 'MDV',
- 'MWI',
- 'MEX',
- 'MYS',
- 'MOZ',
- 'NAM',
- 'NCL',
- 'NER',
- 'NFK',
- 'NGA',
- 'NIC',
- 'NLD',
- 'NOR',
- 'NPL',
- 'NRU',
- 'NIU',
- 'NZL',
- 'OMN',
- 'PAN',
- 'PER',
- 'PYF',
- 'PNG',
- 'PHL',
- 'PAK',
- 'POL',
- 'SPM',
- 'PCN',
- 'PRI',
- 'PSE',
- 'PRT',
- 'PLW',
- 'PRY',
- 'QAT',
- 'REU',
- 'ROU',
- 'RUS',
- 'RWA',
- 'SAU',
- 'SLB',
- 'SYC',
- 'SDN',
- 'SWE',
- 'SGP',
- 'SHN',
- 'SVN',
- 'SJM',
- 'SVK',
- 'SLE',
- 'SMR',
- 'SEN',
- 'SOM',
- 'SUR',
- 'STP',
- 'SLV',
- 'SYR',
- 'SWZ',
- 'TCA',
- 'TCD',
- 'ATF',
- 'TGO',
- 'THA',
- 'TJK',
- 'TKL',
- 'TKM',
- 'TUN',
- 'TON',
- 'TLS',
- 'TUR',
- 'TTO',
- 'TUV',
- 'TWN',
- 'TZA',
- 'UKR',
- 'UGA',
- 'UMI',
- 'USA',
- 'URY',
- 'UZB',
- 'VAT',
- 'VCT',
- 'VEN',
- 'VGB',
- 'VIR',
- 'VNM',
- 'VUT',
- 'WLF',
- 'WSM',
- 'YEM',
- 'MYT',
- 'SRB',
- 'ZAF',
- 'ZMB',
- 'MNE',
- 'ZWE',
- 'A1',
- 'A2',
- 'O1',
- 'ALA',
- 'GGY',
- 'IMN',
- 'JEY',
- 'BLM',
- 'MAF',
- 'BES',
- 'SSD',
- 'O1',
- );
- /**
- * Contry names.
- *
- * @var array
- */
- public $GEOIP_COUNTRY_NAMES = array(
- '',
- 'Asia/Pacific Region',
- 'Europe',
- 'Andorra',
- 'United Arab Emirates',
- 'Afghanistan',
- 'Antigua and Barbuda',
- 'Anguilla',
- 'Albania',
- 'Armenia',
- 'Curacao',
- 'Angola',
- 'Antarctica',
- 'Argentina',
- 'American Samoa',
- 'Austria',
- 'Australia',
- 'Aruba',
- 'Azerbaijan',
- 'Bosnia and Herzegovina',
- 'Barbados',
- 'Bangladesh',
- 'Belgium',
- 'Burkina Faso',
- 'Bulgaria',
- 'Bahrain',
- 'Burundi',
- 'Benin',
- 'Bermuda',
- 'Brunei Darussalam',
- 'Bolivia',
- 'Brazil',
- 'Bahamas',
- 'Bhutan',
- 'Bouvet Island',
- 'Botswana',
- 'Belarus',
- 'Belize',
- 'Canada',
- 'Cocos (Keeling) Islands',
- 'Congo, The Democratic Republic of the',
- 'Central African Republic',
- 'Congo',
- 'Switzerland',
- "Cote D'Ivoire",
- 'Cook Islands',
- 'Chile',
- 'Cameroon',
- 'China',
- 'Colombia',
- 'Costa Rica',
- 'Cuba',
- 'Cape Verde',
- 'Christmas Island',
- 'Cyprus',
- 'Czech Republic',
- 'Germany',
- 'Djibouti',
- 'Denmark',
- 'Dominica',
- 'Dominican Republic',
- 'Algeria',
- 'Ecuador',
- 'Estonia',
- 'Egypt',
- 'Western Sahara',
- 'Eritrea',
- 'Spain',
- 'Ethiopia',
- 'Finland',
- 'Fiji',
- 'Falkland Islands (Malvinas)',
- 'Micronesia, Federated States of',
- 'Faroe Islands',
- 'France',
- 'Sint Maarten (Dutch part)',
- 'Gabon',
- 'United Kingdom',
- 'Grenada',
- 'Georgia',
- 'French Guiana',
- 'Ghana',
- 'Gibraltar',
- 'Greenland',
- 'Gambia',
- 'Guinea',
- 'Guadeloupe',
- 'Equatorial Guinea',
- 'Greece',
- 'South Georgia and the South Sandwich Islands',
- 'Guatemala',
- 'Guam',
- 'Guinea-Bissau',
- 'Guyana',
- 'Hong Kong',
- 'Heard Island and McDonald Islands',
- 'Honduras',
- 'Croatia',
- 'Haiti',
- 'Hungary',
- 'Indonesia',
- 'Ireland',
- 'Israel',
- 'India',
- 'British Indian Ocean Territory',
- 'Iraq',
- 'Iran, Islamic Republic of',
- 'Iceland',
- 'Italy',
- 'Jamaica',
- 'Jordan',
- 'Japan',
- 'Kenya',
- 'Kyrgyzstan',
- 'Cambodia',
- 'Kiribati',
- 'Comoros',
- 'Saint Kitts and Nevis',
- "Korea, Democratic People's Republic of",
- 'Korea, Republic of',
- 'Kuwait',
- 'Cayman Islands',
- 'Kazakhstan',
- "Lao People's Democratic Republic",
- 'Lebanon',
- 'Saint Lucia',
- 'Liechtenstein',
- 'Sri Lanka',
- 'Liberia',
- 'Lesotho',
- 'Lithuania',
- 'Luxembourg',
- 'Latvia',
- 'Libya',
- 'Morocco',
- 'Monaco',
- 'Moldova, Republic of',
- 'Madagascar',
- 'Marshall Islands',
- 'Macedonia',
- 'Mali',
- 'Myanmar',
- 'Mongolia',
- 'Macau',
- 'Northern Mariana Islands',
- 'Martinique',
- 'Mauritania',
- 'Montserrat',
- 'Malta',
- 'Mauritius',
- 'Maldives',
- 'Malawi',
- 'Mexico',
- 'Malaysia',
- 'Mozambique',
- 'Namibia',
- 'New Caledonia',
- 'Niger',
- 'Norfolk Island',
- 'Nigeria',
- 'Nicaragua',
- 'Netherlands',
- 'Norway',
- 'Nepal',
- 'Nauru',
- 'Niue',
- 'New Zealand',
- 'Oman',
- 'Panama',
- 'Peru',
- 'French Polynesia',
- 'Papua New Guinea',
- 'Philippines',
- 'Pakistan',
- 'Poland',
- 'Saint Pierre and Miquelon',
- 'Pitcairn Islands',
- 'Puerto Rico',
- 'Palestinian Territory',
- 'Portugal',
- 'Palau',
- 'Paraguay',
- 'Qatar',
- 'Reunion',
- 'Romania',
- 'Russian Federation',
- 'Rwanda',
- 'Saudi Arabia',
- 'Solomon Islands',
- 'Seychelles',
- 'Sudan',
- 'Sweden',
- 'Singapore',
- 'Saint Helena',
- 'Slovenia',
- 'Svalbard and Jan Mayen',
- 'Slovakia',
- 'Sierra Leone',
- 'San Marino',
- 'Senegal',
- 'Somalia',
- 'Suriname',
- 'Sao Tome and Principe',
- 'El Salvador',
- 'Syrian Arab Republic',
- 'Swaziland',
- 'Turks and Caicos Islands',
- 'Chad',
- 'French Southern Territories',
- 'Togo',
- 'Thailand',
- 'Tajikistan',
- 'Tokelau',
- 'Turkmenistan',
- 'Tunisia',
- 'Tonga',
- 'Timor-Leste',
- 'Turkey',
- 'Trinidad and Tobago',
- 'Tuvalu',
- 'Taiwan',
- 'Tanzania, United Republic of',
- 'Ukraine',
- 'Uganda',
- 'United States Minor Outlying Islands',
- 'United States',
- 'Uruguay',
- 'Uzbekistan',
- 'Holy See (Vatican City State)',
- 'Saint Vincent and the Grenadines',
- 'Venezuela',
- 'Virgin Islands, British',
- 'Virgin Islands, U.S.',
- 'Vietnam',
- 'Vanuatu',
- 'Wallis and Futuna',
- 'Samoa',
- 'Yemen',
- 'Mayotte',
- 'Serbia',
- 'South Africa',
- 'Zambia',
- 'Montenegro',
- 'Zimbabwe',
- 'Anonymous Proxy',
- 'Satellite Provider',
- 'Other',
- 'Aland Islands',
- 'Guernsey',
- 'Isle of Man',
- 'Jersey',
- 'Saint Barthelemy',
- 'Saint Martin',
- 'Bonaire, Saint Eustatius and Saba',
- 'South Sudan',
- 'Other',
- );
- /**
- * 2 letters continent codes.
- *
- * @var array
- */
- public $GEOIP_CONTINENT_CODES = array(
- '--',
- 'AS',
- 'EU',
- 'EU',
- 'AS',
- 'AS',
- 'NA',
- 'NA',
- 'EU',
- 'AS',
- 'NA',
- 'AF',
- 'AN',
- 'SA',
- 'OC',
- 'EU',
- 'OC',
- 'NA',
- 'AS',
- 'EU',
- 'NA',
- 'AS',
- 'EU',
- 'AF',
- 'EU',
- 'AS',
- 'AF',
- 'AF',
- 'NA',
- 'AS',
- 'SA',
- 'SA',
- 'NA',
- 'AS',
- 'AN',
- 'AF',
- 'EU',
- 'NA',
- 'NA',
- 'AS',
- 'AF',
- 'AF',
- 'AF',
- 'EU',
- 'AF',
- 'OC',
- 'SA',
- 'AF',
- 'AS',
- 'SA',
- 'NA',
- 'NA',
- 'AF',
- 'AS',
- 'AS',
- 'EU',
- 'EU',
- 'AF',
- 'EU',
- 'NA',
- 'NA',
- 'AF',
- 'SA',
- 'EU',
- 'AF',
- 'AF',
- 'AF',
- 'EU',
- 'AF',
- 'EU',
- 'OC',
- 'SA',
- 'OC',
- 'EU',
- 'EU',
- 'NA',
- 'AF',
- 'EU',
- 'NA',
- 'AS',
- 'SA',
- 'AF',
- 'EU',
- 'NA',
- 'AF',
- 'AF',
- 'NA',
- 'AF',
- 'EU',
- 'AN',
- 'NA',
- 'OC',
- 'AF',
- 'SA',
- 'AS',
- 'AN',
- 'NA',
- 'EU',
- 'NA',
- 'EU',
- 'AS',
- 'EU',
- 'AS',
- 'AS',
- 'AS',
- 'AS',
- 'AS',
- 'EU',
- 'EU',
- 'NA',
- 'AS',
- 'AS',
- 'AF',
- 'AS',
- 'AS',
- 'OC',
- 'AF',
- 'NA',
- 'AS',
- 'AS',
- 'AS',
- 'NA',
- 'AS',
- 'AS',
- 'AS',
- 'NA',
- 'EU',
- 'AS',
- 'AF',
- 'AF',
- 'EU',
- 'EU',
- 'EU',
- 'AF',
- 'AF',
- 'EU',
- 'EU',
- 'AF',
- 'OC',
- 'EU',
- 'AF',
- 'AS',
- 'AS',
- 'AS',
- 'OC',
- 'NA',
- 'AF',
- 'NA',
- 'EU',
- 'AF',
- 'AS',
- 'AF',
- 'NA',
- 'AS',
- 'AF',
- 'AF',
- 'OC',
- 'AF',
- 'OC',
- 'AF',
- 'NA',
- 'EU',
- 'EU',
- 'AS',
- 'OC',
- 'OC',
- 'OC',
- 'AS',
- 'NA',
- 'SA',
- 'OC',
- 'OC',
- 'AS',
- 'AS',
- 'EU',
- 'NA',
- 'OC',
- 'NA',
- 'AS',
- 'EU',
- 'OC',
- 'SA',
- 'AS',
- 'AF',
- 'EU',
- 'EU',
- 'AF',
- 'AS',
- 'OC',
- 'AF',
- 'AF',
- 'EU',
- 'AS',
- 'AF',
- 'EU',
- 'EU',
- 'EU',
- 'AF',
- 'EU',
- 'AF',
- 'AF',
- 'SA',
- 'AF',
- 'NA',
- 'AS',
- 'AF',
- 'NA',
- 'AF',
- 'AN',
- 'AF',
- 'AS',
- 'AS',
- 'OC',
- 'AS',
- 'AF',
- 'OC',
- 'AS',
- 'EU',
- 'NA',
- 'OC',
- 'AS',
- 'AF',
- 'EU',
- 'AF',
- 'OC',
- 'NA',
- 'SA',
- 'AS',
- 'EU',
- 'NA',
- 'SA',
- 'NA',
- 'NA',
- 'AS',
- 'OC',
- 'OC',
- 'OC',
- 'AS',
- 'AF',
- 'EU',
- 'AF',
- 'AF',
- 'EU',
- 'AF',
- '--',
- '--',
- '--',
- 'EU',
- 'EU',
- 'EU',
- 'EU',
- 'NA',
- 'NA',
- 'NA',
- 'AF',
- '--',
- );
- /** @var WC_Logger Logger instance */
- public static $log = false;
- /**
- * Logging method.
- *
- * @param string $message Log message.
- * @param string $level Optional. Default 'info'.
- * emergency|alert|critical|error|warning|notice|info|debug
- */
- public static function log( $message, $level = 'info' ) {
- if ( empty( self::$log ) ) {
- self::$log = wc_get_logger();
- }
- self::$log->log( $level, $message, array( 'source' => 'geoip' ) );
- }
- /**
- * Open geoip file.
- *
- * @param string $filename
- * @param int $flags
- */
- public function geoip_open( $filename, $flags ) {
- $this->flags = $flags;
- if ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $this->shmid = @shmop_open( self::GEOIP_SHM_KEY, 'a', 0, 0 );
- } else {
- if ( $this->filehandle = fopen( $filename, 'rb' ) ) {
- if ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $s_array = fstat( $this->filehandle );
- $this->memory_buffer = fread( $this->filehandle, $s_array['size'] );
- }
- } else {
- $this->log( 'GeoIP API: Can not open ' . $filename, 'error' );
- }
- }
- $this->_setup_segments();
- }
- /**
- * Setup segments.
- *
- * @return WC_Geo_IP instance
- */
- private function _setup_segments() {
- $this->databaseType = self::GEOIP_COUNTRY_EDITION;
- $this->record_length = self::STANDARD_RECORD_LENGTH;
- if ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $offset = @shmop_size( $this->shmid ) - 3;
- for ( $i = 0; $i < self::STRUCTURE_INFO_MAX_SIZE; $i++ ) {
- $delim = @shmop_read( $this->shmid, $offset, 3 );
- $offset += 3;
- if ( ( chr( 255 ) . chr( 255 ) . chr( 255 ) ) == $delim ) {
- $this->databaseType = ord( @shmop_read( $this->shmid, $offset, 1 ) );
- if ( $this->databaseType >= 106 ) {
- $this->databaseType -= 105;
- }
- $offset++;
- if ( self::GEOIP_REGION_EDITION_REV0 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV0;
- } elseif ( self::GEOIP_REGION_EDITION_REV1 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV1;
- } elseif ( ( self::GEOIP_CITY_EDITION_REV0 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_LOCATIONA_EDITION == $this->databaseType )
- || ( self::GEOIP_ACCURACYRADIUS_EDITION == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV0_V6 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION_V6 == $this->databaseType )
- ) {
- $this->databaseSegments = 0;
- $buf = @shmop_read( $this->shmid, $offset, self::SEGMENT_RECORD_LENGTH );
- for ( $j = 0; $j < self::SEGMENT_RECORD_LENGTH; $j++ ) {
- $this->databaseSegments += ( ord( $buf[ $j ] ) << ( $j * 8 ) );
- }
- if ( ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- ) {
- $this->record_length = self::ORG_RECORD_LENGTH;
- }
- }
- break;
- } else {
- $offset -= 4;
- }
- }
- if ( ( self::GEOIP_COUNTRY_EDITION == $this->databaseType )
- || ( self::GEOIP_COUNTRY_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_PROXY_EDITION == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION == $this->databaseType )
- ) {
- $this->databaseSegments = self::GEOIP_COUNTRY_BEGIN;
- }
- } else {
- $filepos = ftell( $this->filehandle );
- fseek( $this->filehandle, -3, SEEK_END );
- for ( $i = 0; $i < self::STRUCTURE_INFO_MAX_SIZE; $i++ ) {
- $delim = fread( $this->filehandle, 3 );
- if ( ( chr( 255 ) . chr( 255 ) . chr( 255 ) ) == $delim ) {
- $this->databaseType = ord( fread( $this->filehandle, 1 ) );
- if ( $this->databaseType >= 106 ) {
- $this->databaseType -= 105;
- }
- if ( self::GEOIP_REGION_EDITION_REV0 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV0;
- } elseif ( self::GEOIP_REGION_EDITION_REV1 == $this->databaseType ) {
- $this->databaseSegments = self::GEOIP_STATE_BEGIN_REV1;
- } elseif ( ( self::GEOIP_CITY_EDITION_REV0 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV0_V6 == $this->databaseType )
- || ( self::GEOIP_CITY_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_LOCATIONA_EDITION == $this->databaseType )
- || ( self::GEOIP_ACCURACYRADIUS_EDITION == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1 == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION_REV1_V6 == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION == $this->databaseType )
- || ( self::GEOIP_USERTYPE_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION == $this->databaseType )
- || ( self::GEOIP_ASNUM_EDITION_V6 == $this->databaseType )
- ) {
- $this->databaseSegments = 0;
- $buf = fread( $this->filehandle, self::SEGMENT_RECORD_LENGTH );
- for ( $j = 0; $j < self::SEGMENT_RECORD_LENGTH; $j++ ) {
- $this->databaseSegments += ( ord( $buf[ $j ] ) << ( $j * 8 ) );
- }
- if ( ( self::GEOIP_ORG_EDITION == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION == $this->databaseType )
- || ( self::GEOIP_ORG_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_DOMAIN_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_ISP_EDITION_V6 == $this->databaseType )
- ) {
- $this->record_length = self::ORG_RECORD_LENGTH;
- }
- }
- break;
- } else {
- fseek( $this->filehandle, -4, SEEK_CUR );
- }
- }
- if ( ( self::GEOIP_COUNTRY_EDITION == $this->databaseType )
- || ( self::GEOIP_COUNTRY_EDITION_V6 == $this->databaseType )
- || ( self::GEOIP_PROXY_EDITION == $this->databaseType )
- || ( self::GEOIP_NETSPEED_EDITION == $this->databaseType )
- ) {
- $this->databaseSegments = self::GEOIP_COUNTRY_BEGIN;
- }
- fseek( $this->filehandle, $filepos, SEEK_SET );
- }
- return $this;
- }
- /**
- * Close geoip file.
- *
- * @return bool
- */
- public function geoip_close() {
- if ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- return true;
- }
- return fclose( $this->filehandle );
- }
- /**
- * Common get record.
- *
- * @param string $seek_country
- * @return WC_Geo_IP_Record instance
- */
- private function _common_get_record( $seek_country ) {
- // workaround php's broken substr, strpos, etc handling with
- // mbstring.func_overload and mbstring.internal_encoding
- $mbExists = extension_loaded( 'mbstring' );
- if ( $mbExists ) {
- $enc = mb_internal_encoding();
- mb_internal_encoding( 'ISO-8859-1' );
- }
- $record_pointer = $seek_country + ( 2 * $this->record_length - 1 ) * $this->databaseSegments;
- if ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $record_buf = substr( $this->memory_buffer, $record_pointer, FULL_RECORD_LENGTH );
- } elseif ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $record_buf = @shmop_read( $this->shmid, $record_pointer, FULL_RECORD_LENGTH );
- } else {
- fseek( $this->filehandle, $record_pointer, SEEK_SET );
- $record_buf = fread( $this->filehandle, FULL_RECORD_LENGTH );
- }
- $record = new WC_Geo_IP_Record();
- $record_buf_pos = 0;
- $char = ord( substr( $record_buf, $record_buf_pos, 1 ) );
- $record->country_code = $this->GEOIP_COUNTRY_CODES[ $char ];
- $record->country_code3 = $this->GEOIP_COUNTRY_CODES3[ $char ];
- $record->country_name = $this->GEOIP_COUNTRY_NAMES[ $char ];
- $record->continent_code = $this->GEOIP_CONTINENT_CODES[ $char ];
- $str_length = 0;
- $record_buf_pos++;
- // Get region
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- while ( 0 != $char ) {
- $str_length++;
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- }
- if ( $str_length > 0 ) {
- $record->region = substr( $record_buf, $record_buf_pos, $str_length );
- }
- $record_buf_pos += $str_length + 1;
- $str_length = 0;
- // Get city
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- while ( 0 != $char ) {
- $str_length++;
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- }
- if ( $str_length > 0 ) {
- $record->city = substr( $record_buf, $record_buf_pos, $str_length );
- }
- $record_buf_pos += $str_length + 1;
- $str_length = 0;
- // Get postal code
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- while ( 0 != $char ) {
- $str_length++;
- $char = ord( substr( $record_buf, $record_buf_pos + $str_length, 1 ) );
- }
- if ( $str_length > 0 ) {
- $record->postal_code = substr( $record_buf, $record_buf_pos, $str_length );
- }
- $record_buf_pos += $str_length + 1;
- // Get latitude and longitude
- $latitude = 0;
- $longitude = 0;
- for ( $j = 0; $j < 3; ++$j ) {
- $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
- $latitude += ( $char << ( $j * 8 ) );
- }
- $record->latitude = ( $latitude / 10000 ) - 180;
- for ( $j = 0; $j < 3; ++$j ) {
- $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
- $longitude += ( $char << ( $j * 8 ) );
- }
- $record->longitude = ( $longitude / 10000 ) - 180;
- if ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType ) {
- $metroarea_combo = 0;
- if ( 'US' === $record->country_code ) {
- for ( $j = 0; $j < 3; ++$j ) {
- $char = ord( substr( $record_buf, $record_buf_pos++, 1 ) );
- $metroarea_combo += ( $char << ( $j * 8 ) );
- }
- $record->metro_code = $record->dma_code = floor( $metroarea_combo / 1000 );
- $record->area_code = $metroarea_combo % 1000;
- }
- }
- if ( $mbExists ) {
- mb_internal_encoding( $enc );
- }
- return $record;
- }
- /**
- * Get record.
- *
- * @param int $ipnum
- * @return WC_Geo_IP_Record instance
- */
- private function _get_record( $ipnum ) {
- $seek_country = $this->_geoip_seek_country( $ipnum );
- if ( $seek_country == $this->databaseSegments ) {
- return null;
- }
- return $this->_common_get_record( $seek_country );
- }
- /**
- * Seek country IPv6.
- *
- * @param int $ipnum
- * @return string
- */
- public function _geoip_seek_country_v6( $ipnum ) {
- // arrays from unpack start with offset 1
- // yet another php mystery. array_merge work around
- // this broken behaviour
- $v6vec = array_merge( unpack( 'C16', $ipnum ) );
- $offset = 0;
- for ( $depth = 127; $depth >= 0; --$depth ) {
- if ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $buf = $this->_safe_substr(
- $this->memory_buffer,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } elseif ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $buf = @shmop_read(
- $this->shmid,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } else {
- if ( 0 != fseek( $this->filehandle, 2 * $this->record_length * $offset, SEEK_SET ) ) {
- break;
- }
- $buf = fread( $this->filehandle, 2 * $this->record_length );
- }
- $x = array( 0, 0 );
- for ( $i = 0; $i < 2; ++$i ) {
- for ( $j = 0; $j < $this->record_length; ++$j ) {
- $x[ $i ] += ord( $buf[ $this->record_length * $i + $j ] ) << ( $j * 8 );
- }
- }
- $bnum = 127 - $depth;
- $idx = $bnum >> 3;
- $b_mask = 1 << ( $bnum & 7 ^ 7 );
- if ( ( $v6vec[ $idx ] & $b_mask ) > 0 ) {
- if ( $x[1] >= $this->databaseSegments ) {
- return $x[1];
- }
- $offset = $x[1];
- } else {
- if ( $x[0] >= $this->databaseSegments ) {
- return $x[0];
- }
- $offset = $x[0];
- }
- }
- $this->log( 'GeoIP API: Error traversing database - perhaps it is corrupt?', 'error' );
- return false;
- }
- /**
- * Seek country.
- *
- * @param int $ipnum
- * @return string
- */
- private function _geoip_seek_country( $ipnum ) {
- $offset = 0;
- for ( $depth = 31; $depth >= 0; --$depth ) {
- if ( $this->flags & self::GEOIP_MEMORY_CACHE ) {
- $buf = $this->_safe_substr(
- $this->memory_buffer,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } elseif ( $this->flags & self::GEOIP_SHARED_MEMORY ) {
- $buf = @shmop_read(
- $this->shmid,
- 2 * $this->record_length * $offset,
- 2 * $this->record_length
- );
- } else {
- if ( 0 != fseek( $this->filehandle, 2 * $this->record_length * $offset, SEEK_SET ) ) {
- break;
- }
- $buf = fread( $this->filehandle, 2 * $this->record_length );
- }
- $x = array( 0, 0 );
- for ( $i = 0; $i < 2; ++$i ) {
- for ( $j = 0; $j < $this->record_length; ++$j ) {
- $x[ $i ] += ord( $buf[ $this->record_length * $i + $j ] ) << ( $j * 8 );
- }
- }
- if ( $ipnum & ( 1 << $depth ) ) {
- if ( $x[1] >= $this->databaseSegments ) {
- return $x[1];
- }
- $offset = $x[1];
- } else {
- if ( $x[0] >= $this->databaseSegments ) {
- return $x[0];
- }
- $offset = $x[0];
- }
- }
- $this->log( 'GeoIP API: Error traversing database - perhaps it is corrupt?', 'error' );
- return false;
- }
- /**
- * Record by addr.
- *
- * @param string $addr
- *
- * @return WC_Geo_IP_Record
- */
- public function geoip_record_by_addr( $addr ) {
- if ( null == $addr ) {
- return 0;
- }
- $ipnum = ip2long( $addr );
- return $this->_get_record( $ipnum );
- }
- /**
- * Country ID by addr IPv6.
- *
- * @param string $addr
- * @return int|bool
- */
- public function geoip_country_id_by_addr_v6( $addr ) {
- if ( ! defined( 'AF_INET6' ) ) {
- $this->log( 'GEOIP (geoip_country_id_by_addr_v6): PHP was compiled with --disable-ipv6 option' );
- return false;
- }
- $ipnum = inet_pton( $addr );
- return $this->_geoip_seek_country_v6( $ipnum ) - self::GEOIP_COUNTRY_BEGIN;
- }
- /**
- * Country ID by addr.
- *
- * @param string $addr
- * @return int
- */
- public function geoip_country_id_by_addr( $addr ) {
- $ipnum = ip2long( $addr );
- return $this->_geoip_seek_country( $ipnum ) - self::GEOIP_COUNTRY_BEGIN;
- }
- /**
- * Country code by addr IPv6.
- *
- * @param string $addr
- * @return string
- */
- public function geoip_country_code_by_addr_v6( $addr ) {
- $country_id = $this->geoip_country_id_by_addr_v6( $addr );
- if ( false !== $country_id && isset( $this->GEOIP_COUNTRY_CODES[ $country_id ] ) ) {
- return $this->GEOIP_COUNTRY_CODES[ $country_id ];
- }
- return false;
- }
- /**
- * Country code by addr.
- *
- * @param string $addr
- * @return string
- */
- public function geoip_country_code_by_addr( $addr ) {
- if ( self::GEOIP_CITY_EDITION_REV1 == $this->databaseType ) {
- $record = $this->geoip_record_by_addr( $addr );
- if ( false !== $record ) {
- return $record->country_code;
- }
- } else {
- $country_id = $this->geoip_country_id_by_addr( $addr );
- if ( false !== $country_id && isset( $this->GEOIP_COUNTRY_CODES[ $country_id ] ) ) {
- return $this->GEOIP_COUNTRY_CODES[ $country_id ];
- }
- }
- return false;
- }
- /**
- * Encode string.
- *
- * @param string $string
- * @param int $start
- * @param int $length
- * @return string
- */
- private function _safe_substr( $string, $start, $length ) {
- // workaround php's broken substr, strpos, etc handling with
- // mbstring.func_overload and mbstring.internal_encoding
- $mb_exists = extension_loaded( 'mbstring' );
- if ( $mb_exists ) {
- $enc = mb_internal_encoding();
- mb_internal_encoding( 'ISO-8859-1' );
- }
- $buf = substr( $string, $start, $length );
- if ( $mb_exists ) {
- mb_internal_encoding( $enc );
- }
- return $buf;
- }
- }
- /**
- * Geo IP Record class.
- */
- class WC_Geo_IP_Record {
- /**
- * Country code.
- *
- * @var string
- */
- public $country_code;
- /**
- * 3 letters country code.
- *
- * @var string
- */
- public $country_code3;
- /**
- * Country name.
- *
- * @var string
- */
- public $country_name;
- /**
- * Region.
- *
- * @var string
- */
- public $region;
- /**
- * City.
- *
- * @var string
- */
- public $city;
- /**
- * Postal code.
- *
- * @var string
- */
- public $postal_code;
- /**
- * Latitude
- *
- * @var int
- */
- public $latitude;
- /**
- * Longitude.
- *
- * @var int
- */
- public $longitude;
- /**
- * Area code.
- *
- * @var int
- */
- public $area_code;
- /**
- * DMA Code.
- *
- * Metro and DMA code are the same.
- * Use metro code instead.
- *
- * @var float
- */
- public $dma_code;
- /**
- * Metro code.
- *
- * @var float
- */
- public $metro_code;
- /**
- * Continent code.
- *
- * @var string
- */
- public $continent_code;
- }
|