initial commit

This commit is contained in:
Brett O'Donnell 2012-10-02 15:41:36 +09:30
commit 0b75130361
22 changed files with 8165 additions and 0 deletions

BIN
GeoLiteCity.dat Normal file

Binary file not shown.

164
index.php Normal file
View File

@ -0,0 +1,164 @@
<?php
$servers = array();
$servers[] = array(
'name'=>'D-L-K Networks GameServer',
'host'=>'game.d-l-k.net',
'port'=>'30000',
'site'=>'',
);
$servers[] = array(
'name'=>'GameBoom\'s MineTest server MT1',
'host'=>'mt1.gameboom.net',
'port'=>'30000',
'site'=>'http://minetest.net/forum/viewtopic.php?id=2592',
);
$servers[] = array(
'name'=>'glomie\'s server',
'host'=>'94.23.33.108',
'port'=>'30000',
'site'=>'http://minetest.net/forum/viewtopic.php?id=2111',
);
$servers[] = array(
'name'=>'Minetest.Ru main server',
'host'=>'minetest.ru',
'port'=>'30000',
'site'=>'http://minetest.ru/',
);
$servers[] = array(
'name'=>'[Wazu] Clan Server 0.4.1',
'host'=>'wazuclan.com',
'port'=>'30000',
'site'=>'http://www.wazuclan.com',
);
$servers[] = array(
'name'=>'Jordach\'s Pixel Art',
'host'=>'redcrab.suret.net',
'port'=>'30402',
'site'=>'http://minetest.net/forum/viewtopic.php?id=1867',
);
$servers[] = array(
'name'=>'Redcrab\'s Minetest Server 0.3.1',
'host'=>'redcrab.suret.net',
'port'=>'30031',
'site'=>'http://minetest.net/forum/viewtopic.php?id=1380',
);
$servers[] = array(
'name'=>'Redcrab\'s server : for serious builder',
'host'=>'redcrab.suret.net',
'port'=>'30401',
'site'=>'http://minetest.net/forum/viewtopic.php?id=1705',
);
$servers[] = array(
'name'=>'Mrtux\'s Minetest server',
'host'=>'50.112.56.189',
'port'=>'30001',
'site'=>'http://minetest.net/forum/viewtopic.php?id=2653',
);
$servers[] = array(
'name'=>'M13\'s 0.4.3 Server',
'host'=>'m13.sytes.net',
'port'=>'30000',
'site'=>'',
);
$servers[] = array(
'name'=>'Calinou\'s Server',
'host'=>'calin.sytes.net',
'port'=>'30000',
'site'=>'http://minetest.net/forum/viewtopic.php?id=3102',
);
$servers[] = array(
'name'=>'Redcrab\'s server 0.4 dev20120106-1',
'host'=>'redcrab.suret.net',
'port'=>'30401',
'site'=>'http://minetest.net/forum/viewtopic.php?id=606',
);
$servers[] = array(
'name'=>'CoRNeTNoTe\'S SeRVeR [SkyBlock][Australia]',
'host'=>'cornernote.servegame.com',
'port'=>'30000',
'site'=>'http://minetest.net/forum/viewtopic.php?id=3154',
);
$servers[] = array(
'name'=>'Free Build',
'host'=>'199.119.227.56',
'port'=>'30000',
'site'=>'',
);
$servers[] = array(
'name'=>'Menche\'s Server',
'host'=>'menche.servegame.com',
'port'=>'30001',
'site'=>'http://minetest.net/forum/viewtopic.php?id=2124',
);
$servers[] = array(
'name'=>'Globis server',
'host'=>'176.31.175.144',
'port'=>'30000',
'site'=>'http://minetest.net/forum/viewtopic.php?id=2111',
);
$servers[] = array(
'name'=>'Zenoheld the Backstab server',
'host'=>'minetest.freedns.in',
'port'=>'30000',
'site'=>'http://minetest.net/forum/viewtopic.php?id=796',
);
$servers[] = array(
'name'=>'freebuild',
'host'=>'thelunarrepublic.cu.cc',
'port'=>'30000',
'site'=>'http://thelunarrepublic.site90.net/',
);
include("maxmind/geoipcity.inc");
include("maxmind/geoipregionvars.php");
$gi = geoip_open("GeoLiteCity.dat",GEOIP_STANDARD);
?><!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<style type="text/css">
html { height: 100% }
body { height: 100%; margin: 0; padding: 0 }
#map_canvas { height: 100% }
</style>
<script type="text/javascript"
src="http://maps.googleapis.com/maps/api/js?key=AIzaSyA6aXUYnpxJTCdvHwVRK24Sc-fx28Z4gXc&sensor=false">
</script>
<script type="text/javascript">
function initialize() {
var myLatlng = new google.maps.LatLng(-25.363882,131.044922);
var mapOptions = {
zoom: 3,
center: myLatlng,
mapTypeId: google.maps.MapTypeId.ROADMAP
}
var map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
var infowindow = new google.maps.InfoWindow();
<?php
foreach ($servers as $k=>$server) {
$record = geoip_record_by_addr($gi,gethostbyname($server['host']));
if ($record) {
?>
var marker_<?php echo $k; ?> = new google.maps.Marker({
position: new google.maps.LatLng(<?php echo $record->latitude; ?>,<?php echo $record->longitude; ?>),
title: '<?php echo addslashes($server['name']); ?>',
map: map
});
google.maps.event.addListener(marker_<?php echo $k; ?>, 'click', function() {
infowindow.setContent('<strong><a href="<?php echo $server['site']; ?>"><?php echo addslashes($server['name']); ?></a></strong><br/><?php echo $server['host']; ?>:<?php echo $server['port']; ?>');
infowindow.open(map, marker_<?php echo $k; ?>);
});
<?php
}
}
?>
}
</script>
</head>
<body onload="initialize()">
<div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>
<?php
geoip_close($gi);
?>

98
maxmind/ChangeLog Normal file
View File

@ -0,0 +1,98 @@
1.11
* Update Time Zones ( Boris Zentner )
* Update FIPS codes ( Boris Zentner )
1.10 2012-03-26
* Update time zones and country codes ( Boris Zentner )
* Add example for netspeedcell databases. ( Boris Zentner )
1.9 2011-08-23
* Add new datatypes
GEOIP_COUNTRY_EDITION_V6, GEOIP_CITY_EDITION_REV1_V6
GEOIP_CITY_EDITION_REV0_V6, GEOIP_NETSPEED_EDITION_REV1,
GEOIP_NETSPEED_EDITION_REV1_V6, GEOIP_ASNUM_EDITION_V6,
GEOIP_ORG_EDITION_V6, GEOIP_DOMAIN_EDITION_V6,
GEOIP_ISP_EDITION_V6 ( Boris Zentner )
* Add new functions
geoip_country_id_by_name_v6
geoip_country_code_by_name_v6
geoip_country_name_by_name_v6
geoip_country_id_by_addr_v6
geoip_country_code_by_addr_v6
geoip_country_name_by_addr_v6
geoip_name_by_addr_v6
GeoIP_record_by_addr_v6 ( Boris Zentner )
* Add new examples sample-v6.php, sample_city-v6.php and
sample_asn-v6.php ( Boris Zentner )
* Replace ereg with substr ( Boris Zentner )
* replace split by explode ( Boris Zentner )
* Add all missing timezones ( Boris Zentner )
* Fix some 3letter codes ( Boris Zentner )
* Fix some continent codes ( Boris Zentner )
* Update FIPS codes 20100810 ( Boris Zentner )
* Add new database types GEOIP_LOCATIONA_EDITION, GEOIP_DOMAIN_EDITION
and GEOIP_ACCURACYRADIUS_EDITION ( Boris Zentner )
* Workaround php's broken usage of mb_substr instead of substr with
mbstring.func_overload and mbstring.internal_encoding ( Boris Zentner )
* Change Turkey's continent code from AS to EU ( Boris Zentner )
* Update FIPS codes 20090723 ( Boris Zentner )
1.8 2009-04-02
* Add continent_code to the city record. See: sample_city.php ( Boris Zentner )
* Update FIPS codes 20090401 ( Boris Zentner )
* Fixed spelling of Kazakhstan, was Kazakstan
* Fix TN FIPS codes and add two new TH79 and TH80 ( Boris Zentner )
* Fix geoip_country_code_by_addr when used with a city database for unknown or private records ( cpw )
* Update timezone.php
* Sync geoipregionvars.php with fips codes from Jan, 14th 2009 ( Boris Zentner )
* use metro_code in sample_city.php ( Boris Zentner )
* replace the depreciated dma_code field with metro_code ( Boris Zentner )
* remove wrong but unreferenced Singapur SG fips regions codes ( Boris Zentner )
* update regions ( geoipregionvars.php ) ( Boris Zentner )
* Die when the database file is not found or readable ( Boris Zentner )
1.7 2008-1-8
* Added BL/Saint Barthelemy, MF/Saint Martin (ISO-3166-1 additions)
* fixed bug with newlines in Country Name
* replaced $s_array[size] with $s_array['size'] (Daniel Horchner)
* Fix bug where PHP API didn't work with new edition of GeoIP ISP
1.6 2007-1-10
* Added AX/Aland Islands, GG/Guernsey, IM/Isle of Man, JE/Jersey (ISO-3166-1 changes)
* Replaced CS/Serbia and Montenegro with RS/Serbia, removed ZR/Zaire, added ME/Montenegro
* geoip_country_(code|name)_by_addr now work against Geo(IP|Lite) City (Frank Mather)
* Added code to lookup zoneinfo timezone given country and region (Frank Mather)
* TP/East Timor changed to TL/Timor-Leste, reflecting changes in ISO-3166
1.5 2005-11-1
* Added Shared Memory support for GeoIP City (Frank Mather)
* Replaced Yugoslavia with Serbia and Montenegro
* Removed global declaration for $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
and $GEOIP_COUNTRY_CODES3
1.4 2005-01-13 Andrew Hill, Awarez Ltd. (http://www.awarez.net)
* Formatted file according to PEAR library standards.
* Moved $GEOIP_COUNTRY_CODE_TO_NUMBER, $GEOIP_COUNTRY_CODES,
* $GEOIP_COUNTRY_CODES3 and $GEOIP_COUNTRY_NAMES into the
* GeoIP class, so that library will still work even when
* not included in the $GLOBAL context.
* Updated geoip_country_code_by_addr to work with PHP5 (Eric of Host Ultra)
* Replaced bit operators (| and &) with logical operators (|| and &&)
* Defined GEOIP_ISP_EDITION
1.3 2004-8-4
* Changed license from GPL to LGPL so code can be included in PEAR
* added global definitions to prevent undefined variables error when including from function (Cédric Dufour)
* Updated country names
* Added support for GeoIP City, version 1 with DMA and Area codes
1.2 2003-10-28
* Added support for Shared Memory (Jason Priebe)
* Added support for Distributed queries
* Added support for GeoIP Region, version 1
* Added Anonymous Proxy and Satellite Provider code/labels
* Changed Taiwan, Province of China to Taiwan
1.1 2003-01-15
* Added support for GeoIP Region and GeoIP City
1.0 2002-11-21
* Initial checkin to CVS

43
maxmind/README Normal file
View File

@ -0,0 +1,43 @@
Requirements
None (only the 'GeoIP.dat' file is needed). To download a free GeoIP Standard Country
database, go to
http://maxmind.com/download/geoip/database/
Install
Just place the 'geoip.inc' file somewhere according to the 'include_path' directive of
your 'php.ini' file, or just place it in the same directory as your PHP scripts.
Usage
Gets country name by hostname :
include("geoip.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
geoip_close($gi);
Memory Caching:
To enable memory caching, pass GEOIP_SHARED_MEMORY or
GEOIP_MEMORY_CACHE to the second argument of geoip_open
For GEOIP_SHARED_MEMORY, requires php >= 4.0.4,
and --enable-shmop passed at configure time, see
http://us2.php.net/manual/en/ref.shmop.php
In addition, you should call geoip_load_shared_mem
before calling geoip_open. See sample_city.php for an
example of shared memory caching.
Working with PHP5.
geoip_country_code_by_addr should work
with PHP. For help with the other
routines, please contact support@maxmind.com
Thanks to Jim Winstead.

View File

@ -0,0 +1,80 @@
#!/usr/bin/php -q
<?php
# Copyright 2003 Maxmind LLC All Rights Reserved
print "\$iso = array(\n";
$iso = get_iso_3166_2_subcountry_codes();
$keys = array_keys($iso);
$values = array_values($iso);
for ($a0 = 0;$a0 < sizeof($keys);$a0++){
print "\"" . $keys[$a0] . "\" => array(\n";
$keys2 = array_keys($values[$a0]);
$values2 = array_values($values[$a0]);
for ($a1 = 0;$a1 < sizeof($keys2);$a1++){
print "\"" . $keys2[$a1] . "\" => \"" . $values2[$a1] . "\"";
if ($a1 < sizeof($keys2)-1){print ",\n";}
}
if ($a0 < sizeof($keys)-1){
print "),\n";}
else{
print ")\n";}
}
print "\$fips = array(\n";
$fips = get_fips_10_4_subcountry_codes();
$keys = array_keys($fips);
$values = array_values($fips);
for ($a0 = 0;$a0 < sizeof($keys);$a0++){
print "\"" . $keys[$a0] . "\" => array(\n";
$keys2 = array_keys($values[$a0]);
$values2 = array_values($values[$a0]);
for ($a1 = 0;$a1 < sizeof($keys2);$a1++){
#setsubstr($value2[$a1],strlen($value2[$a1])-1,1,",");
print "\"" . $keys2[$a1] . "\" => \"" . $values2[$a1] . "\"";
if ($a1 < sizeof($keys2)-1){print ",\n";}
}
if ($a0 < sizeof($keys)-1){
print "),\n";}
else{
print ")\n";}
}
print ");\n";
function get_iso_3166_2_subcountry_codes(){
$f = fopen("../iso3166_2","r");
$str = fgets($f,4096);
while (!feof($f)){
$str = fgets($f,4096);
$substrs = explode(",",$str);
list($country,$region,$name) = $substrs;
if (count($substrs) > 3){
for ($a0 = 3;$a0 < count($substrs);$a0++){
$name = $name .",". $substrs[$a0];
}
}
if ($name){
$name = substr($name,1,strlen($name)-3);
$a[$country][$region] = $name;}
}
fclose($f);
return $a;
}
function get_fips_10_4_subcountry_codes(){
$f = fopen("../fips10_4","r");
$str = fgets($f,4096);
while (!feof($f)){
$str = fgets($f,4096);
$substrs = explode(",",$str);
list($country,$region,$name) = $substrs;
if (count($substrs) > 3){
for ($a0 = 3;$a0 < count($substrs);$a0++){
$name = $name .",". $substrs[$a0];
}
}
if ($name){
$name = substr($name,1,strlen($name)-3);
$a[$country][$region] = $name;}
}
fclose($f);
return $a;
}
?>

67
maxmind/benchmark.php Normal file
View File

@ -0,0 +1,67 @@
#!/usr/bin/php -q
<?php
set_time_limit('300');
include("geoip.inc");
include("geoipcity.inc");
define("GEOIP_COUNTRY_DATABASE",0);
define("GEOIP_REGION_DATABASE",1);
define("GEOIP_CITY_DATABASE",2);
class mainappc{
var $dbfilename = array("/usr/local/share/GeoIP/GeoIP.dat","/usr/local/share/GeoIP/GeoIPRegion.dat","/usr/local/share/GeoIP/GeoIPCity.dat");
function randomipaddress(){
$result = "";
for ($a = 0;$a < 4;$a++){
if ($a > 0){$result = $result . ".";}
$a2 = rand(1, 254);
$result = $result . $a2;
}
return $result;
}
function ftime(){
$a = gettimeofday();
return $a[sec] + ($a[usec]*0.000001);
}
function testgeoipdatabase($type,$flags,$msg,$numlookups){
$gi = geoip_open($this->dbfilename[$type],$flags);
if ($gi == null){
print "error: " . $this->dbfilename[$type] . " does not exist\n" ;
return;
}
$t1 = $this->ftime();
$i4 = 0;
for ($i2 = 0;$i2 < $numlookups;$i2++){
switch ($type) {
case GEOIP_COUNTRY_DATABASE:
geoip_country_code_by_addr($gi,$this->randomipaddress());
break;
case GEOIP_REGION_DATABASE:
geoip_region_by_addr($gi,$this->randomipaddress());
break;
case GEOIP_CITY_DATABASE:
GeoIP_record_by_addr($gi,$this->randomipaddress());
break;
}
}
$t2 = $this->ftime();
$t3 = $t2-$t1;
print $msg . "\n";
print $numlookups . " lookups made in " . $t3 . " seconds \n";
geoip_close($gi);
}
}
$mainapp = new mainappc();
$mainapp->testgeoipdatabase(GEOIP_COUNTRY_DATABASE,GEOIP_STANDARD,"Geoip Country ",10000);
$mainapp->testgeoipdatabase(GEOIP_COUNTRY_DATABASE,GEOIP_MEMORY_CACHE,"Geoip Country with memory cache",10000);
$mainapp->testgeoipdatabase(GEOIP_REGION_DATABASE,GEOIP_STANDARD,"Geoip Region ",10000);
$mainapp->testgeoipdatabase(GEOIP_REGION_DATABASE,GEOIP_MEMORY_CACHE,"Geoip Region with memory cache",10000);
$mainapp->testgeoipdatabase(GEOIP_CITY_DATABASE,GEOIP_STANDARD,"Geoip City ",10000);
$mainapp->testgeoipdatabase(GEOIP_CITY_DATABASE,GEOIP_MEMORY_CACHE,"Geoip City with memory cache",10000);
?>

713
maxmind/geoip.inc Normal file
View File

@ -0,0 +1,713 @@
<?php
/* -*- Mode: C; indent-tabs-mode: t; c-basic-offset: 2; tab-width: 2 -*- */
/* geoip.inc
*
* Copyright (C) 2007 MaxMind LLC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
define("GEOIP_COUNTRY_BEGIN", 16776960);
define("GEOIP_STATE_BEGIN_REV0", 16700000);
define("GEOIP_STATE_BEGIN_REV1", 16000000);
define("GEOIP_STANDARD", 0);
define("GEOIP_MEMORY_CACHE", 1);
define("GEOIP_SHARED_MEMORY", 2);
define("STRUCTURE_INFO_MAX_SIZE", 20);
define("DATABASE_INFO_MAX_SIZE", 100);
define("GEOIP_COUNTRY_EDITION", 106);
define("GEOIP_PROXY_EDITION", 8);
define("GEOIP_ASNUM_EDITION", 9);
define("GEOIP_NETSPEED_EDITION", 10);
define("GEOIP_REGION_EDITION_REV0", 112);
define("GEOIP_REGION_EDITION_REV1", 3);
define("GEOIP_CITY_EDITION_REV0", 111);
define("GEOIP_CITY_EDITION_REV1", 2);
define("GEOIP_ORG_EDITION", 110);
define("GEOIP_ISP_EDITION", 4);
define("SEGMENT_RECORD_LENGTH", 3);
define("STANDARD_RECORD_LENGTH", 3);
define("ORG_RECORD_LENGTH", 4);
define("MAX_RECORD_LENGTH", 4);
define("MAX_ORG_RECORD_LENGTH", 300);
define("GEOIP_SHM_KEY", 0x4f415401);
define("US_OFFSET", 1);
define("CANADA_OFFSET", 677);
define("WORLD_OFFSET", 1353);
define("FIPS_RANGE", 360);
define("GEOIP_UNKNOWN_SPEED", 0);
define("GEOIP_DIALUP_SPEED", 1);
define("GEOIP_CABLEDSL_SPEED", 2);
define("GEOIP_CORPORATE_SPEED", 3);
define("GEOIP_DOMAIN_EDITION", 11);
define("GEOIP_COUNTRY_EDITION_V6", 12);
define("GEOIP_LOCATIONA_EDITION", 13);
define("GEOIP_ACCURACYRADIUS_EDITION", 14);
define("GEOIP_CITYCOMBINED_EDITION", 15);
define("GEOIP_CITY_EDITION_REV1_V6", 30);
define("GEOIP_CITY_EDITION_REV0_V6",31);
define("GEOIP_NETSPEED_EDITION_REV1",32);
define("GEOIP_NETSPEED_EDITION_REV1_V6",33);
define("GEOIP_USERTYPE_EDITION",28);
define("GEOIP_USERTYPE_EDITION_V6",29);
define("GEOIP_ASNUM_EDITION_V6",21);
define("GEOIP_ISP_EDITION_V6",22);
define("GEOIP_ORG_EDITION_V6",23);
define("GEOIP_DOMAIN_EDITION_V6",24);
define("CITYCOMBINED_FIXED_RECORD", 7 );
class GeoIP {
var $flags;
var $filehandle;
var $memory_buffer;
var $databaseType;
var $databaseSegments;
var $record_length;
var $shmid;
var $GEOIP_COUNTRY_CODE_TO_NUMBER = array(
"" => 0, "AP" => 1, "EU" => 2, "AD" => 3, "AE" => 4, "AF" => 5,
"AG" => 6, "AI" => 7, "AL" => 8, "AM" => 9, "CW" => 10, "AO" => 11,
"AQ" => 12, "AR" => 13, "AS" => 14, "AT" => 15, "AU" => 16, "AW" => 17,
"AZ" => 18, "BA" => 19, "BB" => 20, "BD" => 21, "BE" => 22, "BF" => 23,
"BG" => 24, "BH" => 25, "BI" => 26, "BJ" => 27, "BM" => 28, "BN" => 29,
"BO" => 30, "BR" => 31, "BS" => 32, "BT" => 33, "BV" => 34, "BW" => 35,
"BY" => 36, "BZ" => 37, "CA" => 38, "CC" => 39, "CD" => 40, "CF" => 41,
"CG" => 42, "CH" => 43, "CI" => 44, "CK" => 45, "CL" => 46, "CM" => 47,
"CN" => 48, "CO" => 49, "CR" => 50, "CU" => 51, "CV" => 52, "CX" => 53,
"CY" => 54, "CZ" => 55, "DE" => 56, "DJ" => 57, "DK" => 58, "DM" => 59,
"DO" => 60, "DZ" => 61, "EC" => 62, "EE" => 63, "EG" => 64, "EH" => 65,
"ER" => 66, "ES" => 67, "ET" => 68, "FI" => 69, "FJ" => 70, "FK" => 71,
"FM" => 72, "FO" => 73, "FR" => 74, "SX" => 75, "GA" => 76, "GB" => 77,
"GD" => 78, "GE" => 79, "GF" => 80, "GH" => 81, "GI" => 82, "GL" => 83,
"GM" => 84, "GN" => 85, "GP" => 86, "GQ" => 87, "GR" => 88, "GS" => 89,
"GT" => 90, "GU" => 91, "GW" => 92, "GY" => 93, "HK" => 94, "HM" => 95,
"HN" => 96, "HR" => 97, "HT" => 98, "HU" => 99, "ID" => 100, "IE" => 101,
"IL" => 102, "IN" => 103, "IO" => 104, "IQ" => 105, "IR" => 106, "IS" => 107,
"IT" => 108, "JM" => 109, "JO" => 110, "JP" => 111, "KE" => 112, "KG" => 113,
"KH" => 114, "KI" => 115, "KM" => 116, "KN" => 117, "KP" => 118, "KR" => 119,
"KW" => 120, "KY" => 121, "KZ" => 122, "LA" => 123, "LB" => 124, "LC" => 125,
"LI" => 126, "LK" => 127, "LR" => 128, "LS" => 129, "LT" => 130, "LU" => 131,
"LV" => 132, "LY" => 133, "MA" => 134, "MC" => 135, "MD" => 136, "MG" => 137,
"MH" => 138, "MK" => 139, "ML" => 140, "MM" => 141, "MN" => 142, "MO" => 143,
"MP" => 144, "MQ" => 145, "MR" => 146, "MS" => 147, "MT" => 148, "MU" => 149,
"MV" => 150, "MW" => 151, "MX" => 152, "MY" => 153, "MZ" => 154, "NA" => 155,
"NC" => 156, "NE" => 157, "NF" => 158, "NG" => 159, "NI" => 160, "NL" => 161,
"NO" => 162, "NP" => 163, "NR" => 164, "NU" => 165, "NZ" => 166, "OM" => 167,
"PA" => 168, "PE" => 169, "PF" => 170, "PG" => 171, "PH" => 172, "PK" => 173,
"PL" => 174, "PM" => 175, "PN" => 176, "PR" => 177, "PS" => 178, "PT" => 179,
"PW" => 180, "PY" => 181, "QA" => 182, "RE" => 183, "RO" => 184, "RU" => 185,
"RW" => 186, "SA" => 187, "SB" => 188, "SC" => 189, "SD" => 190, "SE" => 191,
"SG" => 192, "SH" => 193, "SI" => 194, "SJ" => 195, "SK" => 196, "SL" => 197,
"SM" => 198, "SN" => 199, "SO" => 200, "SR" => 201, "ST" => 202, "SV" => 203,
"SY" => 204, "SZ" => 205, "TC" => 206, "TD" => 207, "TF" => 208, "TG" => 209,
"TH" => 210, "TJ" => 211, "TK" => 212, "TM" => 213, "TN" => 214, "TO" => 215,
"TL" => 216, "TR" => 217, "TT" => 218, "TV" => 219, "TW" => 220, "TZ" => 221,
"UA" => 222, "UG" => 223, "UM" => 224, "US" => 225, "UY" => 226, "UZ" => 227,
"VA" => 228, "VC" => 229, "VE" => 230, "VG" => 231, "VI" => 232, "VN" => 233,
"VU" => 234, "WF" => 235, "WS" => 236, "YE" => 237, "YT" => 238, "RS" => 239,
"ZA" => 240, "ZM" => 241, "ME" => 242, "ZW" => 243, "A1" => 244, "A2" => 245,
"O1" => 246, "AX" => 247, "GG" => 248, "IM" => 249, "JE" => 250, "BL" => 251,
"MF" => 252, "BQ" => 253,
);
var $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");
var $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"
);
var $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"
);
var $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"
);
}
function geoip_load_shared_mem ($file) {
$fp = fopen($file, "rb");
if (!$fp) {
print "error opening $file: $php_errormsg\n";
exit;
}
$s_array = fstat($fp);
$size = $s_array['size'];
if ($shmid = @shmop_open (GEOIP_SHM_KEY, "w", 0, 0)) {
shmop_delete ($shmid);
shmop_close ($shmid);
}
$shmid = shmop_open (GEOIP_SHM_KEY, "c", 0644, $size);
shmop_write ($shmid, fread($fp, $size), 0);
shmop_close ($shmid);
}
function _setup_segments($gi){
$gi->databaseType = GEOIP_COUNTRY_EDITION;
$gi->record_length = STANDARD_RECORD_LENGTH;
if ($gi->flags & GEOIP_SHARED_MEMORY) {
$offset = @shmop_size ($gi->shmid) - 3;
for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
$delim = @shmop_read ($gi->shmid, $offset, 3);
$offset += 3;
if ($delim == (chr(255).chr(255).chr(255))) {
$gi->databaseType = ord(@shmop_read ($gi->shmid, $offset, 1));
$offset++;
if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
} else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
} else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)||
($gi->databaseType == GEOIP_CITY_EDITION_REV1)
|| ($gi->databaseType == GEOIP_ORG_EDITION)
|| ($gi->databaseType == GEOIP_ORG_EDITION_V6)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
|| ($gi->databaseType == GEOIP_ISP_EDITION)
|| ($gi->databaseType == GEOIP_ISP_EDITION_V6)
|| ($gi->databaseType == GEOIP_USERTYPE_EDITION)
|| ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
|| ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
|| ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
|| ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
|| ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
|| ($gi->databaseType == GEOIP_ASNUM_EDITION)
|| ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)){
$gi->databaseSegments = 0;
$buf = @shmop_read ($gi->shmid, $offset, SEGMENT_RECORD_LENGTH);
for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
$gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
}
if (($gi->databaseType == GEOIP_ORG_EDITION)
|| ($gi->databaseType == GEOIP_ORG_EDITION_V6)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
|| ($gi->databaseType == GEOIP_ISP_EDITION)
|| ($gi->databaseType == GEOIP_ISP_EDITION_V6)) {
$gi->record_length = ORG_RECORD_LENGTH;
}
}
break;
} else {
$offset -= 4;
}
}
if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
($gi->databaseType == GEOIP_PROXY_EDITION)||
($gi->databaseType == GEOIP_NETSPEED_EDITION)){
$gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
}
} else {
$filepos = ftell($gi->filehandle);
fseek($gi->filehandle, -3, SEEK_END);
for ($i = 0; $i < STRUCTURE_INFO_MAX_SIZE; $i++) {
$delim = fread($gi->filehandle,3);
if ($delim == (chr(255).chr(255).chr(255))){
$gi->databaseType = ord(fread($gi->filehandle,1));
if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV0;
}
else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1){
$gi->databaseSegments = GEOIP_STATE_BEGIN_REV1;
} else if (($gi->databaseType == GEOIP_CITY_EDITION_REV0)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV1)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
|| ($gi->databaseType == GEOIP_ORG_EDITION)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION)
|| ($gi->databaseType == GEOIP_ISP_EDITION)
|| ($gi->databaseType == GEOIP_ORG_EDITION_V6)
|| ($gi->databaseType == GEOIP_DOMAIN_EDITION_V6)
|| ($gi->databaseType == GEOIP_ISP_EDITION_V6)
|| ($gi->databaseType == GEOIP_LOCATIONA_EDITION)
|| ($gi->databaseType == GEOIP_ACCURACYRADIUS_EDITION)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV0_V6)
|| ($gi->databaseType == GEOIP_CITY_EDITION_REV1_V6)
|| ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1)
|| ($gi->databaseType == GEOIP_NETSPEED_EDITION_REV1_V6)
|| ($gi->databaseType == GEOIP_USERTYPE_EDITION)
|| ($gi->databaseType == GEOIP_USERTYPE_EDITION_V6)
|| ($gi->databaseType == GEOIP_ASNUM_EDITION)
|| ($gi->databaseType == GEOIP_ASNUM_EDITION_V6)){
$gi->databaseSegments = 0;
$buf = fread($gi->filehandle,SEGMENT_RECORD_LENGTH);
for ($j = 0;$j < SEGMENT_RECORD_LENGTH;$j++){
$gi->databaseSegments += (ord($buf[$j]) << ($j * 8));
}
if ( ( $gi->databaseType == GEOIP_ORG_EDITION )
|| ( $gi->databaseType == GEOIP_DOMAIN_EDITION )
|| ( $gi->databaseType == GEOIP_ISP_EDITION )
|| ( $gi->databaseType == GEOIP_ORG_EDITION_V6 )
|| ( $gi->databaseType == GEOIP_DOMAIN_EDITION_V6 )
|| ( $gi->databaseType == GEOIP_ISP_EDITION_V6 )) {
$gi->record_length = ORG_RECORD_LENGTH;
}
}
break;
} else {
fseek($gi->filehandle, -4, SEEK_CUR);
}
}
if (($gi->databaseType == GEOIP_COUNTRY_EDITION)||
($gi->databaseType == GEOIP_COUNTRY_EDITION_V6)||
($gi->databaseType == GEOIP_PROXY_EDITION)||
($gi->databaseType == GEOIP_NETSPEED_EDITION)){
$gi->databaseSegments = GEOIP_COUNTRY_BEGIN;
}
fseek($gi->filehandle,$filepos,SEEK_SET);
}
return $gi;
}
function geoip_open($filename, $flags) {
$gi = new GeoIP;
$gi->flags = $flags;
if ($gi->flags & GEOIP_SHARED_MEMORY) {
$gi->shmid = @shmop_open (GEOIP_SHM_KEY, "a", 0, 0);
} else {
$gi->filehandle = fopen($filename,"rb") or die( "Can not open $filename\n" );
if ($gi->flags & GEOIP_MEMORY_CACHE) {
$s_array = fstat($gi->filehandle);
$gi->memory_buffer = fread($gi->filehandle, $s_array['size']);
}
}
$gi = _setup_segments($gi);
return $gi;
}
function geoip_close($gi) {
if ($gi->flags & GEOIP_SHARED_MEMORY) {
return true;
}
return fclose($gi->filehandle);
}
function geoip_country_id_by_name_v6($gi, $name) {
$rec = dns_get_record($name, DNS_AAAA);
if ( !$rec ) {
return false;
}
$addr = $rec[0]["ipv6"];
if (!$addr || $addr == $name) {
return false;
}
return geoip_country_id_by_addr_v6($gi, $addr);
}
function geoip_country_id_by_name($gi, $name) {
$addr = gethostbyname($name);
if (!$addr || $addr == $name) {
return false;
}
return geoip_country_id_by_addr($gi, $addr);
}
function geoip_country_code_by_name_v6($gi, $name) {
$country_id = geoip_country_id_by_name_v6($gi,$name);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_CODES[$country_id];
}
return false;
}
function geoip_country_code_by_name($gi, $name) {
$country_id = geoip_country_id_by_name($gi,$name);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_CODES[$country_id];
}
return false;
}
function geoip_country_name_by_name_v6($gi, $name) {
$country_id = geoip_country_id_by_name_v6($gi,$name);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_NAMES[$country_id];
}
return false;
}
function geoip_country_name_by_name($gi, $name) {
$country_id = geoip_country_id_by_name($gi,$name);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_NAMES[$country_id];
}
return false;
}
function geoip_country_id_by_addr_v6($gi, $addr) {
$ipnum = inet_pton($addr);
return _geoip_seek_country_v6($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
}
function geoip_country_id_by_addr($gi, $addr) {
$ipnum = ip2long($addr);
return _geoip_seek_country($gi, $ipnum) - GEOIP_COUNTRY_BEGIN;
}
function geoip_country_code_by_addr_v6($gi, $addr) {
$country_id = geoip_country_id_by_addr_v6($gi,$addr);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_CODES[$country_id];
}
return false;
}
function geoip_country_code_by_addr($gi, $addr) {
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
$record = geoip_record_by_addr($gi,$addr);
if ( $record !== false ) {
return $record->country_code;
}
} else {
$country_id = geoip_country_id_by_addr($gi,$addr);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_CODES[$country_id];
}
}
return false;
}
function geoip_country_name_by_addr_v6($gi, $addr) {
$country_id = geoip_country_id_by_addr_v6($gi,$addr);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_NAMES[$country_id];
}
return false;
}
function geoip_country_name_by_addr($gi, $addr) {
if ($gi->databaseType == GEOIP_CITY_EDITION_REV1) {
$record = geoip_record_by_addr($gi,$addr);
return $record->country_name;
} else {
$country_id = geoip_country_id_by_addr($gi,$addr);
if ($country_id !== false) {
return $gi->GEOIP_COUNTRY_NAMES[$country_id];
}
}
return false;
}
function _geoip_seek_country_v6($gi, $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 ($gi->flags & GEOIP_MEMORY_CACHE) {
// workaround php's broken substr, strpos, etc handling with
// mbstring.func_overload and mbstring.internal_encoding
$enc = mb_internal_encoding();
mb_internal_encoding('ISO-8859-1');
$buf = substr($gi->memory_buffer,
2 * $gi->record_length * $offset,
2 * $gi->record_length);
mb_internal_encoding($enc);
} elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
$buf = @shmop_read ($gi->shmid,
2 * $gi->record_length * $offset,
2 * $gi->record_length );
} else {
fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
or die("fseek failed");
$buf = fread($gi->filehandle, 2 * $gi->record_length);
}
$x = array(0,0);
for ($i = 0; $i < 2; ++$i) {
for ($j = 0; $j < $gi->record_length; ++$j) {
$x[$i] += ord($buf[$gi->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] >= $gi->databaseSegments) {
return $x[1];
}
$offset = $x[1];
} else {
if ($x[0] >= $gi->databaseSegments) {
return $x[0];
}
$offset = $x[0];
}
}
trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
return false;
}
function _geoip_seek_country($gi, $ipnum) {
$offset = 0;
for ($depth = 31; $depth >= 0; --$depth) {
if ($gi->flags & GEOIP_MEMORY_CACHE) {
// workaround php's broken substr, strpos, etc handling with
// mbstring.func_overload and mbstring.internal_encoding
$enc = mb_internal_encoding();
mb_internal_encoding('ISO-8859-1');
$buf = substr($gi->memory_buffer,
2 * $gi->record_length * $offset,
2 * $gi->record_length);
mb_internal_encoding($enc);
} elseif ($gi->flags & GEOIP_SHARED_MEMORY) {
$buf = @shmop_read ($gi->shmid,
2 * $gi->record_length * $offset,
2 * $gi->record_length );
} else {
fseek($gi->filehandle, 2 * $gi->record_length * $offset, SEEK_SET) == 0
or die("fseek failed");
$buf = fread($gi->filehandle, 2 * $gi->record_length);
}
$x = array(0,0);
for ($i = 0; $i < 2; ++$i) {
for ($j = 0; $j < $gi->record_length; ++$j) {
$x[$i] += ord($buf[$gi->record_length * $i + $j]) << ($j * 8);
}
}
if ($ipnum & (1 << $depth)) {
if ($x[1] >= $gi->databaseSegments) {
return $x[1];
}
$offset = $x[1];
} else {
if ($x[0] >= $gi->databaseSegments) {
return $x[0];
}
$offset = $x[0];
}
}
trigger_error("error traversing database - perhaps it is corrupt?", E_USER_ERROR);
return false;
}
function _common_get_org($gi, $seek_org){
$record_pointer = $seek_org + (2 * $gi->record_length - 1) * $gi->databaseSegments;
if ($gi->flags & GEOIP_SHARED_MEMORY) {
$org_buf = @shmop_read ($gi->shmid, $record_pointer, MAX_ORG_RECORD_LENGTH);
} else {
fseek($gi->filehandle, $record_pointer, SEEK_SET);
$org_buf = fread($gi->filehandle,MAX_ORG_RECORD_LENGTH);
}
// workaround php's broken substr, strpos, etc handling with
// mbstring.func_overload and mbstring.internal_encoding
$enc = mb_internal_encoding();
mb_internal_encoding('ISO-8859-1');
$org_buf = substr($org_buf, 0, strpos($org_buf, "\0"));
mb_internal_encoding($enc);
return $org_buf;
}
function _get_org_v6($gi,$ipnum){
$seek_org = _geoip_seek_country_v6($gi,$ipnum);
if ($seek_org == $gi->databaseSegments) {
return NULL;
}
return _common_get_org($gi, $seek_org);
}
function _get_org($gi,$ipnum){
$seek_org = _geoip_seek_country($gi,$ipnum);
if ($seek_org == $gi->databaseSegments) {
return NULL;
}
return _common_get_org($gi, $seek_org);
}
function geoip_name_by_addr_v6 ($gi,$addr) {
if ($addr == NULL) {
return 0;
}
$ipnum = inet_pton($addr);
return _get_org_v6($gi, $ipnum);
}
function geoip_name_by_addr ($gi,$addr) {
if ($addr == NULL) {
return 0;
}
$ipnum = ip2long($addr);
return _get_org($gi, $ipnum);
}
function geoip_org_by_addr ($gi,$addr) {
return geoip_name_by_addr($gi, $addr);
}
function _get_region($gi,$ipnum){
if ($gi->databaseType == GEOIP_REGION_EDITION_REV0){
$seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV0;
if ($seek_region >= 1000){
$country_code = "US";
$region = chr(($seek_region - 1000)/26 + 65) . chr(($seek_region - 1000)%26 + 65);
} else {
$country_code = $gi->GEOIP_COUNTRY_CODES[$seek_region];
$region = "";
}
return array ($country_code,$region);
} else if ($gi->databaseType == GEOIP_REGION_EDITION_REV1) {
$seek_region = _geoip_seek_country($gi,$ipnum) - GEOIP_STATE_BEGIN_REV1;
//print $seek_region;
if ($seek_region < US_OFFSET){
$country_code = "";
$region = "";
} else if ($seek_region < CANADA_OFFSET) {
$country_code = "US";
$region = chr(($seek_region - US_OFFSET)/26 + 65) . chr(($seek_region - US_OFFSET)%26 + 65);
} else if ($seek_region < WORLD_OFFSET) {
$country_code = "CA";
$region = chr(($seek_region - CANADA_OFFSET)/26 + 65) . chr(($seek_region - CANADA_OFFSET)%26 + 65);
} else {
$country_code = $gi->GEOIP_COUNTRY_CODES[($seek_region - WORLD_OFFSET) / FIPS_RANGE];
$region = "";
}
return array ($country_code,$region);
}
}
function geoip_region_by_addr ($gi,$addr) {
if ($addr == NULL) {
return 0;
}
$ipnum = ip2long($addr);
return _get_region($gi, $ipnum);
}
function getdnsattributes ($l,$ip){
$r = new Net_DNS_Resolver();
$r->nameservers = array("ws1.maxmind.com");
$p = $r->search($l."." . $ip .".s.maxmind.com","TXT","IN");
$str = is_object($p->answer[0])?$p->answer[0]->string():'';
$str = substr( $str, 1, -1 );
return $str;
}
?>

237
maxmind/geoipcity.inc Normal file
View File

@ -0,0 +1,237 @@
<?php
/* geoipcity.inc
*
* Copyright (C) 2004 Maxmind LLC
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
/*
* Changelog:
*
* 2005-01-13 Andrew Hill, Awarez Ltd. (http://www.awarez.net)
* Formatted file according to PEAR library standards.
* Changed inclusion of geoip.inc file to require_once, so that
* this library can be used in the same script as geoip.inc.
*/
define("FULL_RECORD_LENGTH",50);
require_once 'geoip.inc';
require_once 'geoipregionvars.php';
class geoiprecord {
var $country_code;
var $country_code3;
var $country_name;
var $region;
var $city;
var $postal_code;
var $latitude;
var $longitude;
var $area_code;
var $dma_code; # metro and dma code are the same. use metro_code
var $metro_code;
var $continent_code;
}
class geoipdnsrecord {
var $country_code;
var $country_code3;
var $country_name;
var $region;
var $regionname;
var $city;
var $postal_code;
var $latitude;
var $longitude;
var $areacode;
var $dmacode;
var $isp;
var $org;
var $metrocode;
}
function getrecordwithdnsservice($str){
$record = new geoipdnsrecord;
$keyvalue = explode(";",$str);
foreach ($keyvalue as $keyvalue2){
list($key,$value) = explode("=",$keyvalue2);
if ($key == "co"){
$record->country_code = $value;
}
if ($key == "ci"){
$record->city = $value;
}
if ($key == "re"){
$record->region = $value;
}
if ($key == "ac"){
$record->areacode = $value;
}
if ($key == "dm" || $key == "me" ){
$record->dmacode = $value;
$record->metrocode = $value;
}
if ($key == "is"){
$record->isp = $value;
}
if ($key == "or"){
$record->org = $value;
}
if ($key == "zi"){
$record->postal_code = $value;
}
if ($key == "la"){
$record->latitude = $value;
}
if ($key == "lo"){
$record->longitude = $value;
}
}
$number = $GLOBALS['GEOIP_COUNTRY_CODE_TO_NUMBER'][$record->country_code];
$record->country_code3 = $GLOBALS['GEOIP_COUNTRY_CODES3'][$number];
$record->country_name = $GLOBALS['GEOIP_COUNTRY_NAMES'][$number];
if ($record->region != "") {
if (($record->country_code == "US") || ($record->country_code == "CA")){
$record->regionname = $GLOBALS['ISO'][$record->country_code][$record->region];
} else {
$record->regionname = $GLOBALS['FIPS'][$record->country_code][$record->region];
}
}
return $record;
}
function _get_record_v6($gi,$ipnum){
$seek_country = _geoip_seek_country_v6($gi,$ipnum);
if ($seek_country == $gi->databaseSegments) {
return NULL;
}
return _common_get_record($gi, $seek_country);
}
function _common_get_record($gi, $seek_country){
// workaround php's broken substr, strpos, etc handling with
// mbstring.func_overload and mbstring.internal_encoding
$enc = mb_internal_encoding();
mb_internal_encoding('ISO-8859-1');
$record_pointer = $seek_country + (2 * $gi->record_length - 1) * $gi->databaseSegments;
if ($gi->flags & GEOIP_MEMORY_CACHE) {
$record_buf = substr($gi->memory_buffer,$record_pointer,FULL_RECORD_LENGTH);
} elseif ($gi->flags & GEOIP_SHARED_MEMORY){
$record_buf = @shmop_read($gi->shmid,$record_pointer,FULL_RECORD_LENGTH);
} else {
fseek($gi->filehandle, $record_pointer, SEEK_SET);
$record_buf = fread($gi->filehandle,FULL_RECORD_LENGTH);
}
$record = new geoiprecord;
$record_buf_pos = 0;
$char = ord(substr($record_buf,$record_buf_pos,1));
$record->country_code = $gi->GEOIP_COUNTRY_CODES[$char];
$record->country_code3 = $gi->GEOIP_COUNTRY_CODES3[$char];
$record->country_name = $gi->GEOIP_COUNTRY_NAMES[$char];
$record->continent_code = $gi->GEOIP_CONTINENT_CODES[$char];
$record_buf_pos++;
$str_length = 0;
// Get region
$char = ord(substr($record_buf,$record_buf_pos+$str_length,1));
while ($char != 0){
$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 ($char != 0){
$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 ($char != 0){
$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;
$str_length = 0;
// 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 (GEOIP_CITY_EDITION_REV1 == $gi->databaseType){
$metroarea_combo = 0;
if ($record->country_code == "US"){
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;
}
}
mb_internal_encoding($enc);
return $record;
}
function GeoIP_record_by_addr_v6 ($gi,$addr){
if ($addr == NULL){
return 0;
}
$ipnum = inet_pton($addr);
return _get_record_v6($gi, $ipnum);
}
function _get_record($gi,$ipnum){
$seek_country = _geoip_seek_country($gi,$ipnum);
if ($seek_country == $gi->databaseSegments) {
return NULL;
}
return _common_get_record($gi, $seek_country);
}
function GeoIP_record_by_addr ($gi,$addr){
if ($addr == NULL){
return 0;
}
$ipnum = ip2long($addr);
return _get_record($gi, $ipnum);
}
?>

4192
maxmind/geoipregionvars.php Normal file

File diff suppressed because it is too large Load Diff

32
maxmind/sample-v6.php Normal file
View File

@ -0,0 +1,32 @@
#!/usr/bin/php -q
<?php
// This code demonstrates how to lookup the country by IP Address
include("geoip.inc");
// Uncomment if querying against GeoIP/Lite City.
// include("geoipcity.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIPv6.dat",GEOIP_STANDARD);
echo geoip_country_code_by_addr_v6($gi, "::24.24.24.24") . "\t" .
geoip_country_name_by_addr_v6($gi, "::24.24.24.24") . "\n";
echo geoip_country_code_by_addr_v6($gi, "::80.24.24.24") . "\t" .
geoip_country_name_by_addr_v6($gi, "::80.24.24.24") . "\n";
echo geoip_country_code_by_addr_v6($gi, "2001:4860:0:1001::68") . "\t" .
geoip_country_name_by_addr_v6($gi, "2001:4860:0:1001::68") . "\n";
echo geoip_country_code_by_addr_v6($gi, "2001:67c:26c::") . "\t" .
geoip_country_name_by_addr_v6($gi, "2001:67c:26c::") . "\n";
echo geoip_country_code_by_addr_v6($gi, "2001:67c:3a0:ffff:ffff:ffff:ffff:ffff") . "\t" .
geoip_country_name_by_addr_v6($gi, "2001:67c:3a0:ffff:ffff:ffff:ffff:ffff") . "\n";
echo geoip_country_code_by_name_v6($gi, "ipv6.google.com") . "\t" .
geoip_country_name_by_name_v6($gi, "ipv6.google.com") . "\n";
geoip_close($gi);
?>

20
maxmind/sample.php Normal file
View File

@ -0,0 +1,20 @@
#!/usr/bin/php -q
<?php
// This code demonstrates how to lookup the country by IP Address
include("geoip.inc");
// Uncomment if querying against GeoIP/Lite City.
// include("geoipcity.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIP.dat",GEOIP_STANDARD);
echo geoip_country_code_by_addr($gi, "24.24.24.24") . "\t" .
geoip_country_name_by_addr($gi, "24.24.24.24") . "\n";
echo geoip_country_code_by_addr($gi, "80.24.24.24") . "\t" .
geoip_country_name_by_addr($gi, "80.24.24.24") . "\n";
geoip_close($gi);
?>

18
maxmind/sample_asn-v6.php Normal file
View File

@ -0,0 +1,18 @@
#!/usr/bin/php -q
<?php
// This code demonstrates how to lookup the country and region by IP Address
// It is designed to work with GeoIP Organization or GeoIP ISP available from MaxMind
include("geoip.inc");
$giasn = geoip_open("/usr/local/share/GeoIP/GeoIPASNumv6.dat",GEOIP_STANDARD);
$ip = '2001:4860:0:1001::68';
$asn = geoip_name_by_addr_v6($giasn,$ip);
print "$ip has asn " . $asn . "\n";
geoip_close($giasn);
?>

View File

@ -0,0 +1,33 @@
#!/usr/bin/php -q
<?php
// This code demonstrates how to lookup the country, region, city,
// postal code, latitude, and longitude by IP Address.
// It is designed to work with GeoIP/GeoLite City
// Note that you must download the New Format of GeoIP City (GEO-133).
// The old format (GEO-132) will not work.
include("geoipcity.inc");
include("geoipregionvars.php");
// uncomment for Shared Memory support
// geoip_load_shared_mem("/usr/local/share/GeoIP/GeoIPCity.dat");
// $gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_SHARED_MEMORY);
$gi = geoip_open("/usr/local/share/GeoIP/GeoLiteCityv6.dat",GEOIP_STANDARD);
$record = geoip_record_by_addr_v6($gi,"::24.24.24.24");
print $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n";
print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n";
print $record->city . "\n";
print $record->postal_code . "\n";
print $record->latitude . "\n";
print $record->longitude . "\n";
print $record->metro_code . "\n";
print $record->area_code . "\n";
print $record->continent_code . "\n";
geoip_close($gi);
?>

33
maxmind/sample_city.php Normal file
View File

@ -0,0 +1,33 @@
#!/usr/bin/php -q
<?php
// This code demonstrates how to lookup the country, region, city,
// postal code, latitude, and longitude by IP Address.
// It is designed to work with GeoIP/GeoLite City
// Note that you must download the New Format of GeoIP City (GEO-133).
// The old format (GEO-132) will not work.
include("geoipcity.inc");
include("geoipregionvars.php");
// uncomment for Shared Memory support
// geoip_load_shared_mem("/usr/local/share/GeoIP/GeoIPCity.dat");
// $gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_SHARED_MEMORY);
$gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_STANDARD);
$record = geoip_record_by_addr($gi,"24.24.24.24");
print $record->country_code . " " . $record->country_code3 . " " . $record->country_name . "\n";
print $record->region . " " . $GEOIP_REGION_NAME[$record->country_code][$record->region] . "\n";
print $record->city . "\n";
print $record->postal_code . "\n";
print $record->latitude . "\n";
print $record->longitude . "\n";
print $record->metro_code . "\n";
print $record->area_code . "\n";
print $record->continent_code . "\n";
geoip_close($gi);
?>

View File

@ -0,0 +1,31 @@
#!/usr/bin/php -q
<?php
include("geoipcity.inc");
include("Net/DNS.php");
# replace LICENSE_KEY_HERE with your license key
$l = "LICENSE_KEY_HERE";
$ip = "24.24.24.24";
if ($l == "LICENSE_KEY_HERE") {
print "Error, must edit sample_distributed.php to replace LICENSE_KEY_HERE\n";
exit;
}
$str = getdnsattributes($l,$ip);
$r = getrecordwithdnsservice($str);
print "country code: " . $r->country_code . "\n";
print "country code3: " . $r->country_code3 . "\n";
print "country name: " . $r->country_name . "\n";
print "city: " . $r->city . "\n";
print "region: " . $r->region . "\n";
print "region name: " . $r->regionname . "\n";
print "postal_code: " . $r->postal_code . "\n";
print "latitude: " . $r->latitude . "\n";
print "longitude: " . $r->longitude . "\n";
print "area code: " . $r->areacode . "\n";
print "dma code: " . $r->dmacode . "\n";
print "isp: " . $r->isp . "\n";
print "org: " . $r->org . "\n";
?>

View File

@ -0,0 +1,23 @@
#!/usr/bin/php -q
<?php
include("geoip.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIPNetSpeed.dat",GEOIP_STANDARD);
$netspeed = geoip_country_id_by_addr($gi,"24.24.24.24");
//print $n . "\n";
if ($netspeed == GEOIP_UNKNOWN_SPEED){
print "Unknown\n";
}else if ($netspeed == GEOIP_DIALUP_SPEED){
print "Dailup\n";
}else if ($netspeed == GEOIP_CABLEDSL_SPEED){
print "Cable/DSL\n";
}else if ($netspeed == GEOIP_CORPORATE_SPEED){
print "Corporate\n";
}
geoip_close($gi);
?>

View File

@ -0,0 +1,14 @@
#!/usr/bin/php -q
<?php
include("geoip.inc");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIPNetSpeedCell.dat",GEOIP_STANDARD);
$netspeed = geoip_name_by_addr($gi,"24.24.24.24");
print $netspeed . "\n";
geoip_close($gi);
?>

23
maxmind/sample_org.php Normal file
View File

@ -0,0 +1,23 @@
#!/usr/bin/php -q
<?php
// This code demonstrates how to lookup the country and region by IP Address
// It is designed to work with GeoIP Organization or GeoIP ISP available from MaxMind
include("geoip.inc");
$giorg = geoip_open("/usr/local/share/GeoIP/GeoIPOrg.dat",GEOIP_STANDARD);
$org = geoip_org_by_addr($giorg,"80.24.24.24");
print "80.24.24.24 belongs to " . $org . "\n";
$giisp = geoip_open("/usr/local/share/GeoIP/GeoIPISP.dat",GEOIP_STANDARD);
$isp = geoip_org_by_addr($giisp,"80.24.24.24");
print "80.24.24.24 has isp " . $isp . "\n";
geoip_close($giorg);
geoip_close($giisp);
?>

20
maxmind/sample_region.php Normal file
View File

@ -0,0 +1,20 @@
#!/usr/bin/php -q
<?php
// This code demonstrates how to lookup the country and region by IP Address
// It is designed to work with GeoIP Region available from MaxMind
include("geoip.inc");
include("geoipregionvars.php");
$gi = geoip_open("/usr/local/share/GeoIP/GeoIPRegion.dat",GEOIP_STANDARD);
list ($countrycode,$region) = geoip_region_by_addr($gi,"24.24.24.24");
print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
list ($countrycode,$region) = geoip_region_by_addr($gi,"80.24.24.24");
print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
list ($countrycode,$region) = geoip_region_by_addr($gi,"199.243.137.184");
print $countrycode . " " . $region . " " . $GEOIP_REGION_NAME[$countrycode][$region] . "\n";
geoip_close($gi);
?>

View File

@ -0,0 +1,48 @@
#!/usr/bin/perl
use strict;
my $old_country;
my $old_region;
# Obtain timezone.txt from http://www.maxmind.com/timezone.txt
open(FILE,"timezone.txt");
my $str = <FILE>;
print "<?php \n";
print "function get_time_zone(\$country,\$region) {\n";
print " switch (\$country) { \n";
while ($str = <FILE>) {
$str =~ s!\s*$!!;
my ($country,$region,$timezone) = split("\t",$str);
#print $country . "," . $region . "," . $timezone . "\n";
if ($country ne $old_country) {
if ($old_region ne "") {
print " } \n";
print " break;\n";
}
print "case " . qq(") . $country . qq(") . ":\n";
if ($region ne "") {
print " switch (\$region) { \n";
}
}
if ($region ne "") {
print " case " . qq(") . $region . qq(") . ":\n ";
}
print qq( \$timezone = ") . $timezone . qq(") . ";\n";
if ($region ne "") {
print " break;\n";
} else {
print " break;\n";
}
$old_country = $country;
$old_region = $region;
}
print " } \n";
print " return \$timezone; \n";
print "} \n";
print "?> \n";
close(FILE);

View File

@ -0,0 +1,5 @@
#!/usr/bin/php -q
<?php
require("timezone.php");
print get_time_zone("US","WV");
?>

File diff suppressed because it is too large Load Diff