Jump to content

Help with Country IP script


saud

Recommended Posts

Whenever I run this script I get wrong results for country.

all the database and files can be downloaded from http://software77.net/cgi-bin/ip-country/geo-ip.pl

But the Perl script gives the correct result. All the files are listed there.

 

 

If i change the $addr to "213.6.49.205" it shows wrong results and should show Norway.

<?php

 

// Get the surfer's ip address

$addr = getenv("REMOTE_ADDR");

echo "Your IP, IPv4: " . $addr . "<br />\n";

 

$ip = sprintf("%010u", ip2long($addr));

echo "Your IP, numerical: " . $ip . "<br /><br />\n";

 

// Initiate the timer

$time_start = microtime_float();

 

// Open the csv file for reading

$handle = fopen("IpToCountry.csv", "r");

 

// Load array with start ips

$row = 1;

while (($buffer = fgets($handle, 9096)) !== FALSE) {

  $array[$row] = $buffer;

  $row++;

}

 

// Time loading

$time_end = microtime_float();

$time = substr($time_end - $time_start, 0, 7);

echo "Array with " . $row . " start ips loaded in $time seconds<br /><br />\n";

 

// Locate the row with our ip using bisection

$row_lower = '0';

$row_upper = $row;

while (($row_upper - $row_lower) > 1) {

  $row_midpt = (int) (($row_upper + $row_lower) / 2);

  $buffer = $array[$row_midpt];

  $start_ip = sprintf("%010u", substr($buffer, 1, strpos($buffer, ",") - 1));

  if ($ip >= $start_ip) {

    $row_lower = $row_midpt;

  } else {

    $row_upper = $row_midpt;

  }

}

 

// Time locating

$time_end = microtime_float();

$time = substr($time_end - $time_start, 0, 7);

echo "Row with your ip (# " . $row_lower . ") located after $time seconds<br /><br />\n";

 

// Read the row with our ip

$buffer = $array[$row_lower];

$buffer = str_replace("\"", "", $buffer);

$ipdata = explode(",", $buffer);

echo "Data retrieved from the csv file:<br />\n";

echo "ipstart = " . sprintf("%010u", $ipdata[0]) . "<br />\n";

echo "ipend = " . sprintf("%010u", $ipdata[1]) . "<br />\n";

echo "registry = " . $ipdata[2] . "<br />\n";

echo "assigned = " . date('j.n.Y', $ipdata[3]) . "<br />\n";

echo "iso2 = " . $ipdata[4] . "<br />\n";

echo "iso3 = " . $ipdata[5] . "<br />\n";

echo "country = " . $ipdata[6] . "<br /><br />\n";

 

// Close the csv file

fclose($handle);

 

// Total execution time

$time_end = microtime_float();

$time = substr($time_end - $time_start, 0, 7);

echo "Executing the whole script took $time seconds\n";

 

function microtime_float()

{

  list($usec, $sec) = explode(" ", microtime());

  return ((float)$usec + (float)$sec);

}

 

?>

 

The thing is that IP is correctly mentioned in the database, just the PHP script is not reading the database correctly, while the CGI script is doing it correctly. DO a test yourself by downloading both the files, they are free too.

http://webnet77.com/scripts/geo-ip/IP-country-FREE.zip

 

Database download: http://software77.net/cgi-bin/ip-cou...ction=download

 

Main website: http://software77.net/cgi-bin/ip-country/geo-ip.pl

Link to comment
https://forums.phpfreaks.com/topic/118962-help-with-country-ip-script/
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.