<?php
/*
Scan through the entire stats database and update all country details.
Do this once a month when you download the latest country database for
GeoIP from MaxMind.
*/
include("geoip.inc");
$gi = geoip_open("##GEOIP_DATABASE##",GEOIP_STANDARD);
// eprintstats db
$sqlserver = 'localhost';
$sqluser = 'eprintstatspriv';
$sqlpass = 'AuldGrizzel';
$sqldatabase = 'eprintstats';
// IP ranges for your local Intranet. Each pair represents the lower
// and upper bound of the range, respectively.
$local_name = 'Otago Intranet';
$local_IPs = array(
array(
'lower' => ip2long('139.80.0.0'),
'upper' => ip2long('139.80.127.255'),
),
);
###########################################
##
## No configuration required below here.
##
###########################################
$connect = mysql_connect ($sqlserver,$sqluser,$sqlpass);
$db = mysql_select_db($sqldatabase,$connect) or die("Could not connect");
$query = "select id, ip, country_code from view";
$result = mysql_query($query, $connect);
while ($row = mysql_fetch_assoc($result))
{
$id = $row['id'];
$ip = $row['ip'];
$stored_country = $row['country_code'];
$long_ip = ip2long($ip);
// Determine country code and name.
// If the number falls into the local intranet range, then
// use that instead of GeoIP.
$ip_long = ip2long($ip);
foreach ($local_IPs as $key => $range)
{
if (($ip_long >= $range['lower']) && ($ip_long <= $range['upper']))
{
$country_code = 'T5';
$country_name = $local_name;
}
else
{
$country_code = geoip_country_code_by_addr($gi, $ip);
$country_name = geoip_country_name_by_addr($gi, $ip);
}
}
// Only update the row if its country has changed.
if ($stored_country != $country_code)
{
$update = "update view set country_code='" . $country_code . "', country_name='" . $country_name . "' where id=" . $id;
$result2 = mysql_query($update, $connect);
}
}
/*
Keep track of where we are. Should avoid duplication of results
if the script is run more than once on the same log file
*/
$query = "INSERT into lastproc (lastproc) values('".$request_date."')";
$result = mysql_query($query,$connect);
#print "Records counted: $counter\n";
#print "Last count: $request_date\n";
mysql_close($connect);
?>