Issues (1965)

html/inc/geoip.inc (159 issues)

1
<?php
2
3
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
4
/* geoip.inc
5
 *
6
 * Copyright (C) 2004 MaxMind LLC
7
 *
8
 * This library is free software; you can redistribute it and/or
9
 * modify it under the terms of the GNU Lesser General Public
10
 * License as published by the Free Software Foundation; either
11
 * version 2.1 of the License, or (at your option) any later version.
12
 *
13
 * This library is distributed in the hope that it will be useful,
14
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
15
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16
 * Lesser General Public License for more details.
17
 *
18
 * You should have received a copy of the GNU Lesser General Public
19
 * License along with this library; if not, write to the Free Software
20
 * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
21
 */
22
23
/*
24
 * Changelog:
25
 *
26
 * 2005-01-13   Andrew Hill, Awarez Ltd. (http://www.awarez.net)
27
 *              Formatted file according to PEAR library standards.
28
 *              Moved $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
29
 *                  $GEOIP_COUNTRY_CODES3 and $GEOIP_COUNTRY_NAMES into the
30
 *                  GeoIP class, so that library will still work even when
31
 *                  not included in the $GLOBAL context.
32
 */
33
34
define("GEOIP_COUNTRY_BEGIN", 16776960);
35
define("GEOIP_STATE_BEGIN_REV0", 16700000);
36
define("GEOIP_STATE_BEGIN_REV1", 16000000);
37
define("GEOIP_STANDARD", 0);
38
define("GEOIP_MEMORY_CACHE", 1);
39
define("GEOIP_SHARED_MEMORY", 2);
40
define("STRUCTURE_INFO_MAX_SIZE", 20);
41
define("DATABASE_INFO_MAX_SIZE", 100);
42
define("GEOIP_COUNTRY_EDITION", 106);
43
define("GEOIP_PROXY_EDITION", 8);
44
define("GEOIP_ASNUM_EDITION", 9);
45
define("GEOIP_NETSPEED_EDITION", 10);
46
define("GEOIP_REGION_EDITION_REV0", 112);
47
define("GEOIP_REGION_EDITION_REV1", 3);
48
define("GEOIP_CITY_EDITION_REV0", 111);
49
define("GEOIP_CITY_EDITION_REV1", 2);
50
define("GEOIP_ORG_EDITION", 110);
51
define("GEOIP_ISP_EDITION", 4);
52
define("SEGMENT_RECORD_LENGTH", 3);
53
define("STANDARD_RECORD_LENGTH", 3);
54
define("ORG_RECORD_LENGTH", 4);
55
define("MAX_RECORD_LENGTH", 4);
56
define("MAX_ORG_RECORD_LENGTH", 300);
57
define("GEOIP_SHM_KEY", 0x4f415401);
58
define("US_OFFSET", 1);
59
define("CANADA_OFFSET", 677);
60
define("WORLD_OFFSET", 1353);
61
define("FIPS_RANGE", 360);
62
define("GEOIP_UNKNOWN_SPEED", 0);
63
define("GEOIP_DIALUP_SPEED", 1);
64
define("GEOIP_CABLEDSL_SPEED", 2);
65
define("GEOIP_CORPORATE_SPEED", 3);
66
67
class GeoIP {
68
    var $flags;
69
    var $filehandle;
70
    var $memory_buffer;
71
    var $databaseType;
72
    var $databaseSegments;
73
    var $record_length;
74
    var $shmid;
75
    var $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
76
"" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
77
"AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "AN" => 10, "AO" => 11, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
78
"AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
79
"AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
80
"BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
81
"BO" => 30, "BR" => 31, "BS" => 32, "BT" => 33, "BV" => 34, "BW" => 35, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
82
"BY" => 36, "BZ" => 37, "CA" => 38, "CC" => 39, "CD" => 40, "CF" => 41, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
83
"CG" => 42, "CH" => 43, "CI" => 44, "CK" => 45, "CL" => 46, "CM" => 47, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
84
"CN" => 48, "CO" => 49, "CR" => 50, "CU" => 51, "CV" => 52, "CX" => 53, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
85
"CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
86
"DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
87
"ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
88
"FM" => 72, "FO" => 73, "FR" => 74, "FX" => 75, "GA" => 76, "GB" => 77,
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
89
"GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
90
"GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
91
"GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
92
"HN" => 96, "HR" => 97, "HT" => 98, "HU" => 99, "ID" => 100, "IE" => 101, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
93
"IL" => 102, "IN" => 103, "IO" => 104, "IQ" => 105, "IR" => 106, "IS" => 107, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
94
"IT" => 108, "JM" => 109, "JO" => 110, "JP" => 111, "KE" => 112, "KG" => 113, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
95
"KH" => 114, "KI" => 115, "KM" => 116, "KN" => 117, "KP" => 118, "KR" => 119, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
96
"KW" => 120, "KY" => 121, "KZ" => 122, "LA" => 123, "LB" => 124, "LC" => 125, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
97
"LI" => 126, "LK" => 127, "LR" => 128, "LS" => 129, "LT" => 130, "LU" => 131, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
98
"LV" => 132, "LY" => 133, "MA" => 134, "MC" => 135, "MD" => 136, "MG" => 137, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
99
"MH" => 138, "MK" => 139, "ML" => 140, "MM" => 141, "MN" => 142, "MO" => 143, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
100
"MP" => 144, "MQ" => 145, "MR" => 146, "MS" => 147, "MT" => 148, "MU" => 149, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
101
"MV" => 150, "MW" => 151, "MX" => 152, "MY" => 153, "MZ" => 154, "NA" => 155,
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
102
"NC" => 156, "NE" => 157, "NF" => 158, "NG" => 159, "NI" => 160, "NL" => 161, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
103
"NO" => 162, "NP" => 163, "NR" => 164, "NU" => 165, "NZ" => 166, "OM" => 167, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
104
"PA" => 168, "PE" => 169, "PF" => 170, "PG" => 171, "PH" => 172, "PK" => 173, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
105
"PL" => 174, "PM" => 175, "PN" => 176, "PR" => 177, "PS" => 178, "PT" => 179, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
106
"PW" => 180, "PY" => 181, "QA" => 182, "RE" => 183, "RO" => 184, "RU" => 185, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
107
"RW" => 186, "SA" => 187, "SB" => 188, "SC" => 189, "SD" => 190, "SE" => 191, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
108
"SG" => 192, "SH" => 193, "SI" => 194, "SJ" => 195, "SK" => 196, "SL" => 197, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
109
"SM" => 198, "SN" => 199, "SO" => 200, "SR" => 201, "ST" => 202, "SV" => 203, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
110
"SY" => 204, "SZ" => 205, "TC" => 206, "TD" => 207, "TF" => 208, "TG" => 209, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
111
"TH" => 210, "TJ" => 211, "TK" => 212, "TM" => 213, "TN" => 214, "TO" => 215, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
112
"TP" => 216, "TR" => 217, "TT" => 218, "TV" => 219, "TW" => 220, "TZ" => 221, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
113
"UA" => 222, "UG" => 223, "UM" => 224, "US" => 225, "UY" => 226, "UZ" => 227, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
114
"VA" => 228, "VC" => 229, "VE" => 230, "VG" => 231, "VI" => 232, "VN" => 233,
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
115
"VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "CS" => 239, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
116
"ZA" => 240, "ZM" => 241, "ZR" => 242, "ZW" => 243, "A1" => 244, "A2" => 245, 
0 ignored issues
show
Each index in a multi-line array must be on a new line
Loading history...
117
"O1" => 246
118
);
119
    var $GEOIP_COUNTRY_CODES = array(
120
"", "AP", "EU", "AD", "AE", "AF", "AG", "AI", "AL", "AM", "AN", "AO", "AQ",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
121
"AR", "AS", "AT", "AU", "AW", "AZ", "BA", "BB", "BD", "BE", "BF", "BG", "BH",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
122
"BI", "BJ", "BM", "BN", "BO", "BR", "BS", "BT", "BV", "BW", "BY", "BZ", "CA",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
123
"CC", "CD", "CF", "CG", "CH", "CI", "CK", "CL", "CM", "CN", "CO", "CR", "CU",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
124
"CV", "CX", "CY", "CZ", "DE", "DJ", "DK", "DM", "DO", "DZ", "EC", "EE", "EG",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
125
"EH", "ER", "ES", "ET", "FI", "FJ", "FK", "FM", "FO", "FR", "FX", "GA", "GB",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
126
"GD", "GE", "GF", "GH", "GI", "GL", "GM", "GN", "GP", "GQ", "GR", "GS", "GT",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
127
"GU", "GW", "GY", "HK", "HM", "HN", "HR", "HT", "HU", "ID", "IE", "IL", "IN",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
128
"IO", "IQ", "IR", "IS", "IT", "JM", "JO", "JP", "KE", "KG", "KH", "KI", "KM",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
129
"KN", "KP", "KR", "KW", "KY", "KZ", "LA", "LB", "LC", "LI", "LK", "LR", "LS",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
130
"LT", "LU", "LV", "LY", "MA", "MC", "MD", "MG", "MH", "MK", "ML", "MM", "MN",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
131
"MO", "MP", "MQ", "MR", "MS", "MT", "MU", "MV", "MW", "MX", "MY", "MZ", "NA",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
132
"NC", "NE", "NF", "NG", "NI", "NL", "NO", "NP", "NR", "NU", "NZ", "OM", "PA",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
133
"PE", "PF", "PG", "PH", "PK", "PL", "PM", "PN", "PR", "PS", "PT", "PW", "PY",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
134
"QA", "RE", "RO", "RU", "RW", "SA", "SB", "SC", "SD", "SE", "SG", "SH", "SI",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
135
"SJ", "SK", "SL", "SM", "SN", "SO", "SR", "ST", "SV", "SY", "SZ", "TC", "TD",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
136
"TF", "TG", "TH", "TJ", "TK", "TM", "TN", "TO", "TP", "TR", "TT", "TV", "TW",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
137
"TZ", "UA", "UG", "UM", "US", "UY", "UZ", "VA", "VC", "VE", "VG", "VI", "VN",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
138
"VU", "WF", "WS", "YE", "YT", "CS", "ZA", "ZM", "ZR", "ZW", "A1", "A2", "O1"
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
There should be a trailing comma after the last value of an array declaration.
Loading history...
139
);
140
    var $GEOIP_COUNTRY_CODES3 = array(
141
"","AP","EU","AND","ARE","AFG","ATG","AIA","ALB","ARM","ANT","AGO","AQ","ARG",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
142
"ASM","AUT","AUS","ABW","AZE","BIH","BRB","BGD","BEL","BFA","BGR","BHR","BDI",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
143
"BEN","BMU","BRN","BOL","BRA","BHS","BTN","BV","BWA","BLR","BLZ","CAN","CC",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
144
"COD","CAF","COG","CHE","CIV","COK","CHL","CMR","CHN","COL","CRI","CUB","CPV",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
145
"CX","CYP","CZE","DEU","DJI","DNK","DMA","DOM","DZA","ECU","EST","EGY","ESH",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
146
"ERI","ESP","ETH","FIN","FJI","FLK","FSM","FRO","FRA","FX","GAB","GBR","GRD",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
147
"GEO","GUF","GHA","GIB","GRL","GMB","GIN","GLP","GNQ","GRC","GS","GTM","GUM",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
148
"GNB","GUY","HKG","HM","HND","HRV","HTI","HUN","IDN","IRL","ISR","IND","IO",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
149
"IRQ","IRN","ISL","ITA","JAM","JOR","JPN","KEN","KGZ","KHM","KIR","COM","KNA",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
150
"PRK","KOR","KWT","CYM","KAZ","LAO","LBN","LCA","LIE","LKA","LBR","LSO","LTU",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
151
"LUX","LVA","LBY","MAR","MCO","MDA","MDG","MHL","MKD","MLI","MMR","MNG","MAC",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
152
"MNP","MTQ","MRT","MSR","MLT","MUS","MDV","MWI","MEX","MYS","MOZ","NAM","NCL",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
153
"NER","NFK","NGA","NIC","NLD","NOR","NPL","NRU","NIU","NZL","OMN","PAN","PER",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
154
"PYF","PNG","PHL","PAK","POL","SPM","PCN","PRI","PSE","PRT","PLW","PRY","QAT",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
155
"REU","ROU","RUS","RWA","SAU","SLB","SYC","SDN","SWE","SGP","SHN","SVN","SJM",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
156
"SVK","SLE","SMR","SEN","SOM","SUR","STP","SLV","SYR","SWZ","TCA","TCD","TF",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
157
"TGO","THA","TJK","TKL","TLS","TKM","TUN","TON","TUR","TTO","TUV","TWN","TZA",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
158
"UKR","UGA","UM","USA","URY","UZB","VAT","VCT","VEN","VGB","VIR","VNM","VUT",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
159
        "WLF","WSM","YEM","YT","SCG","ZAF","ZMB","ZR","ZWE","A1","A2","O1"
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
There should be a trailing comma after the last value of an array declaration.
Loading history...
160
    );
161
    var $GEOIP_COUNTRY_NAMES = array(
162
"", "Asia/Pacific Region", "Europe", "Andorra", "United Arab Emirates",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
163
"Afghanistan", "Antigua and Barbuda", "Anguilla", "Albania", "Armenia",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
164
"Netherlands Antilles", "Angola", "Antarctica", "Argentina", "American Samoa",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
165
"Austria", "Australia", "Aruba", "Azerbaijan", "Bosnia and Herzegovina",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
166
"Barbados", "Bangladesh", "Belgium", "Burkina Faso", "Bulgaria", "Bahrain",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
167
"Burundi", "Benin", "Bermuda", "Brunei Darussalam", "Bolivia", "Brazil",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
168
"Bahamas", "Bhutan", "Bouvet Island", "Botswana", "Belarus", "Belize",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
169
"Canada", "Cocos (Keeling) Islands", "Congo, The Democratic Republic of the",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
170
"Central African Republic", "Congo", "Switzerland", "Cote D'Ivoire", "Cook
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
171
Islands", "Chile", "Cameroon", "China", "Colombia", "Costa Rica", "Cuba", "Cape
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
172
Verde", "Christmas Island", "Cyprus", "Czech Republic", "Germany", "Djibouti",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
173
"Denmark", "Dominica", "Dominican Republic", "Algeria", "Ecuador", "Estonia",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
174
"Egypt", "Western Sahara", "Eritrea", "Spain", "Ethiopia", "Finland", "Fiji",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
175
"Falkland Islands (Malvinas)", "Micronesia, Federated States of", "Faroe
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
176
Islands", "France", "France, Metropolitan", "Gabon", "United Kingdom",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
177
"Grenada", "Georgia", "French Guiana", "Ghana", "Gibraltar", "Greenland",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
178
"Gambia", "Guinea", "Guadeloupe", "Equatorial Guinea", "Greece", "South Georgia
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
179
and the South Sandwich Islands", "Guatemala", "Guam", "Guinea-Bissau",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
180
"Guyana", "Hong Kong", "Heard Island and McDonald Islands", "Honduras",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
181
"Croatia", "Haiti", "Hungary", "Indonesia", "Ireland", "Israel", "India",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
182
"British Indian Ocean Territory", "Iraq", "Iran, Islamic Republic of",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
183
"Iceland", "Italy", "Jamaica", "Jordan", "Japan", "Kenya", "Kyrgyzstan",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
184
"Cambodia", "Kiribati", "Comoros", "Saint Kitts and Nevis", "Korea, Democratic
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
185
People's Republic of", "Korea, Republic of", "Kuwait", "Cayman Islands",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
186
"Kazakstan", "Lao People's Democratic Republic", "Lebanon", "Saint Lucia",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
187
"Liechtenstein", "Sri Lanka", "Liberia", "Lesotho", "Lithuania", "Luxembourg",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
188
"Latvia", "Libyan Arab Jamahiriya", "Morocco", "Monaco", "Moldova, Republic
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
189
of", "Madagascar", "Marshall Islands", "Macedonia",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
190
"Mali", "Myanmar", "Mongolia", "Macau", "Northern Mariana Islands",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
191
"Martinique", "Mauritania", "Montserrat", "Malta", "Mauritius", "Maldives",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
192
"Malawi", "Mexico", "Malaysia", "Mozambique", "Namibia", "New Caledonia",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
193
"Niger", "Norfolk Island", "Nigeria", "Nicaragua", "Netherlands", "Norway",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
194
"Nepal", "Nauru", "Niue", "New Zealand", "Oman", "Panama", "Peru", "French
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
195
Polynesia", "Papua New Guinea", "Philippines", "Pakistan", "Poland", "Saint
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
196
Pierre and Miquelon", "Pitcairn Islands", "Puerto Rico", "Palestinian Territory",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
197
"Portugal", "Palau", "Paraguay", "Qatar", "Reunion", "Romania",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
198
"Russian Federation", "Rwanda", "Saudi Arabia", "Solomon Islands",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
199
"Seychelles", "Sudan", "Sweden", "Singapore", "Saint Helena", "Slovenia",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
200
"Svalbard and Jan Mayen", "Slovakia", "Sierra Leone", "San Marino", "Senegal",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
201
"Somalia", "Suriname", "Sao Tome and Principe", "El Salvador", "Syrian Arab
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
202
Republic", "Swaziland", "Turks and Caicos Islands", "Chad", "French Southern
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
203
Territories", "Togo", "Thailand", "Tajikistan", "Tokelau", "Turkmenistan",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
204
"Tunisia", "Tonga", "East Timor", "Turkey", "Trinidad and Tobago", "Tuvalu",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
205
"Taiwan", "Tanzania, United Republic of", "Ukraine",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
206
"Uganda", "United States Minor Outlying Islands", "United States", "Uruguay",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
207
"Uzbekistan", "Holy See (Vatican City State)", "Saint Vincent and the
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
208
Grenadines", "Venezuela", "Virgin Islands, British", "Virgin Islands, U.S.",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
209
"Vietnam", "Vanuatu", "Wallis and Futuna", "Samoa", "Yemen", "Mayotte",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
210
"Serbia and Montenegro", "South Africa", "Zambia", "Zaire", "Zimbabwe",
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
211
"Anonymous Proxy","Satellite Provider","Other"
0 ignored issues
show
Each value in a multi-line array must be on a new line
Loading history...
There should be a trailing comma after the last value of an array declaration.
Loading history...
212
);
213
}
214
function geoip_load_shared_mem ($file) {
0 ignored issues
show
Expected "function abc(...)"; found "function abc (...)"
Loading history...
Expected 0 spaces before opening parenthesis; 1 found
Loading history...
215
216
  $fp = fopen($file, "rb");
217
  if (!$fp) {
0 ignored issues
show
$fp is of type resource, thus it always evaluated to false.
Loading history...
218
    print "error opening $file: $php_errormsg\n";
219
    exit;
0 ignored issues
show
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
220
  }
221
  $s_array = fstat($fp);
222
  $size = $s_array['size'];
223
  if ($shmid = @shmop_open (GEOIP_SHM_KEY, "w", 0, 0)) {
224
    shmop_delete ($shmid);
225
    shmop_close ($shmid);
226
  }
227
  $shmid = shmop_open (GEOIP_SHM_KEY, "c", 0644, $size);
228
  shmop_write ($shmid, fread($fp, $size), 0);
229
  shmop_close ($shmid);
230
}
231
232
function _setup_segments($gi){
233
  $gi->databaseType = GEOIP_COUNTRY_EDITION;
234
  $gi->record_length = STANDARD_RECORD_LENGTH;
235
  if ($gi->flags & GEOIP_SHARED_MEMORY) {
236
    $offset = @shmop_size ($gi->shmid) - 3;
237
    for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
238
        $delim = @shmop_read ($gi->shmid, $offset, 3);
239
        $offset += 3;
240
        if ($delim == (chr(255).chr(255).chr(255))) {
241
            $gi->databaseType = ord(@shmop_read ($gi->shmid, $offset, 1));
242
            $offset++;
243
244
            if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
245
                $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
246
            } else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
247
                $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
248
	    } else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)||
0 ignored issues
show
Expected 1 space before logical operator; 0 found
Loading history...
249
                     ($gi->databaseType == GEOIP_CITY_EDITION_REV1) 
250
                    || ($gi->databaseType == GEOIP_ORG_EDITION)
251
		    || ($gi->databaseType == GEOIP_ISP_EDITION)
252
		    || ($gi->databaseType == GEOIP_ASNUM_EDITION)){
253
                $gi->databaseSegments = 0;
254
                $buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
255
                for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
0 ignored issues
show
Expected 1 space after first semicolon of FOR loop; 0 found
Loading history...
Expected 1 space after second semicolon of FOR loop; 0 found
Loading history...
256
                    $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
257
                }
258
	            if (($gi->databaseType == GEOIP_ORG_EDITION)||
0 ignored issues
show
Expected 1 space before logical operator; 0 found
Loading history...
259
			($gi->databaseType == GEOIP_ISP_EDITION)) {
260
	                $gi->record_length = ORG_RECORD_LENGTH;
261
                }
262
            }
263
            break;
264
        } else {
265
            $offset -= 4;
266
        }
267
    }
268
    if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
0 ignored issues
show
Expected 1 space before logical operator; 0 found
Loading history...
269
        ($gi->databaseType == GEOIP_PROXY_EDITION)||
0 ignored issues
show
Expected 1 space before logical operator; 0 found
Loading history...
270
        ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
271
        $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
272
    }
273
  } else {
274
    $filepos = ftell($gi->filehandle);
275
    fseek($gi->filehandle, -3, SEEK_END);
276
    for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
277
        $delim = fread($gi->filehandle,3);
278
        if ($delim == (chr(255).chr(255).chr(255))){
279
        $gi->databaseType = ord(fread($gi->filehandle,1));
280
        if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
281
            $gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
282
        }
283
        else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
284
	    $gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
285
                }  else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0) ||
286
                 ($gi->databaseType == GEOIP_CITY_EDITION_REV1) || 
287
                 ($gi->databaseType == GEOIP_ORG_EDITION) || 
288
		 ($gi->databaseType == GEOIP_ISP_EDITION) || 
289
                 ($gi->databaseType == GEOIP_ASNUM_EDITION)){
290
            $gi->databaseSegments = 0;
291
            $buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
292
            for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
0 ignored issues
show
Expected 1 space after first semicolon of FOR loop; 0 found
Loading history...
Expected 1 space after second semicolon of FOR loop; 0 found
Loading history...
293
            $gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
294
            }
295
	    if ($gi->databaseType == GEOIP_ORG_EDITION) {
296
	    $gi->record_length = ORG_RECORD_LENGTH;
297
            }
298
        }
299
        break;
300
        } else {
301
        fseek($gi->filehandle, -4, SEEK_CUR);
302
        }
303
    }
304
    if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
0 ignored issues
show
Expected 1 space before logical operator; 0 found
Loading history...
305
        ($gi->databaseType == GEOIP_PROXY_EDITION)||
0 ignored issues
show
Expected 1 space before logical operator; 0 found
Loading history...
306
        ($gi->databaseType == GEOIP_NETSPEED_EDITION)){
307
         $gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
308
    }
309
    fseek($gi->filehandle,$filepos,SEEK_SET);
310
  }
311
  return $gi;
312
}
313
314
function geoip_open($filename, $flags) {
315
  $gi = new GeoIP;
316
  $gi->flags = $flags;
317
  if ($gi->flags & GEOIP_SHARED_MEMORY) {
318
    $gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0);
319
    } else {
320
    $gi->filehandle = fopen($filename,"rb");
321
    if ($gi->flags & GEOIP_MEMORY_CACHE) {
322
        $s_array = fstat($gi->filehandle);
323
        $gi->memory_buffer = fread($gi->filehandle, $s_array[size]);
324
    }
325
  }
326
327
  $gi = _setup_segments($gi);
328
  return $gi;
329
}
330
331
function geoip_close($gi) {
332
  if ($gi->flags & GEOIP_SHARED_MEMORY) {
333
    return true;
334
  }
335
336
  return fclose($gi->filehandle);
337
}
338
339
function geoip_country_id_by_name($gi, $name) {
340
  $addr = gethostbyname($name);
341
  if (!$addr || $addr == $name) {
342
    return false;
343
  }
344
  return geoip_country_id_by_addr($gi, $addr);
345
}
346
347
function geoip_country_code_by_name($gi, $name) {
348
  $country_id = geoip_country_id_by_name($gi,$name);
349
  if ($country_id !== false) {
350
        return $gi->GEOIP_COUNTRY_CODES[$country_id];
351
  }
352
  return false;
353
}
354
355
function geoip_country_name_by_name($gi, $name) {
356
  $country_id = geoip_country_id_by_name($gi,$name);
357
  if ($country_id !== false) {
358
        return $gi->GEOIP_COUNTRY_NAMES[$country_id];
359
  }
360
  return false;
361
}
362
363
function geoip_country_id_by_addr($gi, $addr) {
364
  $ipnum = ip2long($addr);
365
  return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
366
}
367
368
function geoip_country_code_by_addr($gi, $addr) {
369
  $country_id = geoip_country_id_by_addr($gi,$addr);
370
  if ($country_id !== false) {
0 ignored issues
show
The condition $country_id !== false is always true.
Loading history...
371
    return $gi->GEOIP_COUNTRY_CODES[$country_id];
372
  }
373
  return false;
374
}
375
376
function geoip_country_name_by_addr($gi, $addr) {
377
  $country_id = geoip_country_id_by_addr($gi,$addr);
378
  if ($country_id !== false) {
0 ignored issues
show
The condition $country_id !== false is always true.
Loading history...
379
        return $gi->GEOIP_COUNTRY_NAMES[$country_id];
380
  }
381
  return false;
382
}
383
384
function _geoip_seek_country($gi, $ipnum) {
385
  $offset = 0;
386
  for ($depth = 31; $depth >= 0; --$depth) {
387
    if ($gi->flags & GEOIP_MEMORY_CACHE) {
388
      $buf = substr($gi->memory_buffer,
389
                            2 * $gi->record_length * $offset,
390
                            2 * $gi->record_length);
391
        } elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
392
      $buf = @shmop_read ($gi->shmid, 
393
                            2 * $gi->record_length * $offset,
394
                            2 * $gi->record_length );
395
        } else {
396
      fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
397
        or die("fseek failed");
0 ignored issues
show
Comprehensibility Best Practice introduced by
Using logical operators such as or instead of || is generally not recommended.

PHP has two types of connecting operators (logical operators, and boolean operators):

  Logical Operators Boolean Operator
AND - meaning and &&
OR - meaning or ||

The difference between these is the order in which they are executed. In most cases, you would want to use a boolean operator like &&, or ||.

Let’s take a look at a few examples:

// Logical operators have lower precedence:
$f = false or true;

// is executed like this:
($f = false) or true;


// Boolean operators have higher precedence:
$f = false || true;

// is executed like this:
$f = (false || true);

Logical Operators are used for Control-Flow

One case where you explicitly want to use logical operators is for control-flow such as this:

$x === 5
    or die('$x must be 5.');

// Instead of
if ($x !== 5) {
    die('$x must be 5.');
}

Since die introduces problems of its own, f.e. it makes our code hardly testable, and prevents any kind of more sophisticated error handling; you probably do not want to use this in real-world code. Unfortunately, logical operators cannot be combined with throw at this point:

// The following is currently a parse error.
$x === 5
    or throw new RuntimeException('$x must be 5.');

These limitations lead to logical operators rarely being of use in current PHP code.

Loading history...
Using exit here is not recommended.

In general, usage of exit should be done with care and only when running in a scripting context like a CLI script.

Loading history...
398
      $buf = fread($gi->filehandle, 2 * $gi->record_length);
399
    }
400
    $x = array(0,0);
401
    for ($i = 0; $i < 2; ++$i) {
402
      for ($j = 0; $j < $gi->record_length; ++$j) {
403
        $x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
404
      }
405
    }
406
    if ($ipnum & (1 << $depth)) {
407
      if ($x[1] >= $gi->databaseSegments) {
408
        return $x[1];
409
      }
410
      $offset = $x[1];
411
        } else {
412
      if ($x[0] >= $gi->databaseSegments) {
413
        return $x[0];
414
      }
415
      $offset = $x[0];
416
    }
417
  }
418
  trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
419
  return false;
420
}
421
422
function _get_org($gi,$ipnum){
423
  $seek_org = _geoip_seek_country($gi,$ipnum);
424
  if ($seek_org == $gi->databaseSegments) {
425
    return NULL;
426
  }
427
  $record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
428
  if ($gi->flags & GEOIP_SHARED_MEMORY) {
429
    $org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
430
    } else {
431
    fseek($gi->filehandle, $record_pointer, SEEK_SET);
432
    $org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH);
433
  }
434
  $org_buf = substr($org_buf, 0, strpos($org_buf, 0));
435
  return $org_buf;
436
}
437
438
function geoip_org_by_addr ($gi,$addr) {
0 ignored issues
show
Expected "function abc(...)"; found "function abc (...)"
Loading history...
Expected 0 spaces before opening parenthesis; 1 found
Loading history...
439
  if ($addr == NULL) {
440
    return 0;
441
  }
442
  $ipnum = ip2long($addr);
443
  return _get_org($gi, $ipnum);
444
}
445
446
function _get_region($gi,$ipnum){
447
  if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
448
    $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;
449
    if ($seek_region >= 1000){
450
      $country_code = "US";
451
      $region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65);
452
    } else {
453
            $country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
454
      $region = "";
455
    }
456
  return array ($country_code,$region);
0 ignored issues
show
There must be no space between the "array" keyword and the opening parenthesis
Loading history...
457
    }  else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
458
    $seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1;
459
    //print $seek_region;
460
    if ($seek_region < US_OFFSET){
461
      $country_code = "";
462
      $region = "";  
463
        } else if ($seek_region < CANADA_OFFSET) {
464
      $country_code = "US";
465
      $region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65);
466
        } else if ($seek_region < WORLD_OFFSET) {
467
      $country_code = "CA";
468
      $region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65);
469
    } else {
470
            $country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
471
      $region = "";
472
    }
473
  return array ($country_code,$region);
0 ignored issues
show
There must be no space between the "array" keyword and the opening parenthesis
Loading history...
474
  }
475
}
476
477
function geoip_region_by_addr ($gi,$addr) {
0 ignored issues
show
Expected "function abc(...)"; found "function abc (...)"
Loading history...
Expected 0 spaces before opening parenthesis; 1 found
Loading history...
478
  if ($addr == NULL) {
479
    return 0;
480
  }
481
  $ipnum = ip2long($addr);
482
  return _get_region($gi, $ipnum);
483
}
484
485
function getdnsattributes ($l,$ip){
0 ignored issues
show
Expected "function abc(...)"; found "function abc (...)"
Loading history...
Expected 0 spaces before opening parenthesis; 1 found
Loading history...
486
  $r = new Net_DNS_Resolver();
0 ignored issues
show
The type Net_DNS_Resolver was not found. Maybe you did not declare it correctly or list all dependencies?

The issue could also be caused by a filter entry in the build configuration. If the path has been excluded in your configuration, e.g. excluded_paths: ["lib/*"], you can move it to the dependency path list as follows:

filter:
    dependency_paths: ["lib/*"]

For further information see https://scrutinizer-ci.com/docs/tools/php/php-scrutinizer/#list-dependency-paths

Loading history...
487
  $r->nameservers = array("ws1.maxmind.com");
488
  $p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");
489
  $str = is_object($p->answer[0])?$p->answer[0]->string():'';
490
  ereg("\"(.*)\"",$str,$regs);
491
  $str = $regs[1];
492
  return $str;
493
}
494
495
?>
496