I've just spent a little time setting up a trial for Geo IPLite to resolve users IP addresses to Country, seeing as you've all been nice and posted things like this here I thought I would too.
I've ran my demo from a Linux apache server running MySQL, I am currently using Perl but have also tested using PHP.
1st off download the CSV data from here and import the data into your database, I found the instructions here to be full and complete for my purposes (I would rewrite it here but it's that good).
Not wanting to install their APIs I set about utilizing the data from Perl, the biggest problem is that the GeoIP lists ip addresses as "ip strings" (which is a term I hadn't come across before).
The IP string is a concatination of the 4 (8bit) binary IP blocks converted to decimal. So as a quick example 192.168.1.0 becomes 3215458560.
I believe the PHP for getting the user IP address/string is
I couldn't find a perl function so wrote one
Then use that number in the following SQL query
Hopefully that will get you going.
Humous
I've ran my demo from a Linux apache server running MySQL, I am currently using Perl but have also tested using PHP.
1st off download the CSV data from here and import the data into your database, I found the instructions here to be full and complete for my purposes (I would rewrite it here but it's that good).
Not wanting to install their APIs I set about utilizing the data from Perl, the biggest problem is that the GeoIP lists ip addresses as "ip strings" (which is a term I hadn't come across before).
The IP string is a concatination of the 4 (8bit) binary IP blocks converted to decimal. So as a quick example 192.168.1.0 becomes 3215458560.
I believe the PHP for getting the user IP address/string is
PHP:
$ipstring=ip2long($_SERVER);['REMOTE_ADDR']
I couldn't find a perl function so wrote one
Code:
$ipstring=ipstring($ENV{'REMOTE_ADDR'});
sub ipstring
{
my ($numip) = @_;
my($w,$null,$x,$null,$y,$null,$z,$null)=split /([.])/,$numip;
$numw = substr(unpack("B*", pack("N", $w)),24,8);
$numx = substr(unpack("B*", pack("N", $x)),24,8);
$numy = substr(unpack("B*", pack("N", $y)),24,8);
$numz = substr(unpack("B*", pack("N", $z)),24,8);
$comb="$numw$numx$numy$numz";
$decval = unpack("N", pack("B32", substr($comb, -32)));
return $decval;
}
Then use that number in the following SQL query
Code:
select cc.ci,cc.cn from ip,cc where ip.start < "$ipstring" AND ip.end > "$ipstring" AND ip.ci=cc.ci
Hopefully that will get you going.
Humous