We were asked a few times the code of our IP Location APIs so here they are. If you see ways to improve them (especially for speed) please let us know in the
.
//connect to db
$con = mysql_connect("localhost", "XXXXXX", "XXXXXX") or die(mysql_error());
if (!$con)
{
die("Could not connect: " . mysql_error());
}
mysql_select_db("XXXXXX", $con);
//get the IP
if ($_GET["ip"]){
$ip = $_GET["ip"];
}else{
$ip = getenv("REMOTE_ADDR");
}
if ($_GET["output"]) $output = $_GET["output"];
if ($_GET["callback"]) $callback = $_GET["callback"];
$sql_query = "SELECT * FROM `ip_group_city` where `ip_start` <= INET_ATON('" . mysql_real_escape_string($ip) . "') order by ip_start desc limit 1;";
$sql = mysql_query($sql_query, $con);
while($data = mysql_fetch_array($sql)){
$code = "OK";
$country_code = $data["country_code"];
$country_name = utf8_encode($data["country_name"]);
$region_name = utf8_encode($data["region_name"]);
$region_code = $data["region_code"];
$city = utf8_encode($data["city"]);
$zipcode = $data["zipcode"];
$latitude = $data["latitude"];
$longitude = $data["longitude"];
$gmtoffset = $data["gmtOffset"];
$dstoffset = $data["dstOffset"];
}
if (!($code)) $code = "IP NOT FOUND IN DATABASE, SORRY!";
if ($_GET["output"]){
switch($output){
case "raw";
header('Content-Type: text/html; charset=UTF-8');
echo "$ip,";
echo "$code,";
echo "$country_code,";
echo "$country_name,";
echo "$region_code,";
echo "$region_name,";
echo "$city,";
echo "$zipcode,";
echo "$latitude,";
echo "$longitude,";
echo "$gmtoffset,";
echo "$dstoffset";
break;
case "json";
if ($callback){
header('Content-Type: text/html; charset=UTF-8');
echo "$callback(\n";
echo "{\n";
echo "\"Ip\" : \"$ip\",\n";
echo "\"Status\" : \"$code\",\n";
echo "\"CountryCode\" : \"$country_code\",\n";
echo "\"CountryName\" : \"$country_name\",\n";
echo "\"RegionCode\" : \"$region_code\",\n";
echo "\"RegionName\" : \"$region_name\",\n";
echo "\"City\" : \"$city\",\n";
echo "\"ZipPostalCode\" : \"$zipcode\",\n";
echo "\"Latitude\" : \"$latitude\",\n";
echo "\"Longitude\" : \"$longitude\",\n";
echo "\"Gmtoffset\" : \"$gmtoffset\",\n";
echo "\"Dstoffset\" : \"$dstoffset\"\n";
echo "}\n";
echo ")";
}else{
header('Content-Type: text/html; charset=UTF-8');
echo "{\n";
echo "\"Ip\" : \"$ip\",\n";
echo "\"Status\" : \"$code\",\n";
echo "\"CountryCode\" : \"$country_code\",\n";
echo "\"CountryName\" : \"$country_name\",\n";
echo "\"RegionCode\" : \"$region_code\",\n";
echo "\"RegionName\" : \"$region_name\",\n";
echo "\"City\" : \"$city\",\n";
echo "\"ZipPostalCode\" : \"$zipcode\",\n";
echo "\"Latitude\" : \"$latitude\",\n";
echo "\"Longitude\" : \"$longitude\",\n";
echo "\"Gmtoffset\" : \"$gmtoffset\",\n";
echo "\"Dstoffset\" : \"$dstoffset\"\n";
echo "}";
}
break;
default;
header('Content-type: text/xml');
echo "\"1.0\" encoding=\"UTF-8\"?>\n";
echo "\n";
echo " $ip\n";
echo " $code\n";
echo " $country_code\n";
echo " $country_name\n";
echo " $region_code\n";
echo " $region_name\n";
echo " $city\n";
echo " $zipcode\n";
echo " $latitude\n";
echo " $longitude\n";
echo " $gmtoffset\n";
echo " $dstoffset\n";
echo "\n";
break;
}
}else{
header('Content-type: text/xml');
echo "\"1.0\" encoding=\"UTF-8\"?>\n";
echo "\n";
echo " $ip\n";
echo " $code\n";
echo " $country_code\n";
echo " $country_name\n";
echo " $region_code\n";
echo " $region_name\n";
echo " $city\n";
echo " $zipcode\n";
echo " $latitude\n";
echo " $longitude\n";
echo " $gmtoffset\n";
echo " $dstoffset\n";
echo "\n";
}
?>
//connect to db
$con = mysql_connect("localhost", "XXXXXX", "XXXXXX") or die(mysql_error());
if (!$con)
{
die("Could not connect: " . mysql_error());
}
mysql_select_db("XXXXXX", $con);
//get the IP
if ($_GET["ip"]){
$ips = $_GET["ip"];
}else{
$ips = getenv("REMOTE_ADDR");
}
if ($_GET["output"]) $output = $_GET["output"];
if ($_GET["callback"]) $callback = $_GET["callback"];
$ip_list = explode(",",$ips);
if ((sizeof($ip_list) <= 25)&&(sizeof($ip_list) > 0)){
for($i = 0; $i < sizeof($ip_list); $i++){
$ip = $ip_list[$i];
if(preg_match("/[a-zA-Z]/",$ip)){
$domain = $ip;
$ip = gethostbyname($domain);
sleep(1);
}
$sql_query = "SELECT * FROM `ip_group_city` where `ip_start` <= INET_ATON('" . mysql_real_escape_string($ip) . "') order by ip_start desc limit 1;";
$sql = mysql_query($sql_query, $con);
if (mysql_num_rows($sql) == 1){
while($data = mysql_fetch_array($sql)){
$ip_geodata[$i] = array( ip => $ip,
code => "OK",
country_code => $data["country_code"],
country_name => utf8_encode($data["country_name"]),
region_code => $data["region_code"],
region_name => utf8_encode($data["region_name"]),
city => utf8_encode($data["city"]),
zipcode => utf8_encode($data["zipcode"]),
latitude => $data["latitude"],
longitude => $data["longitude"],
gmtoffset => $data["gmtOffset"],
dstoffset => $data["dstOffset"]);
}
}else{
$ip_geodata[$i] = array( ip => $ip,
code => "IP NOT FOUND",
country_code => "",
country_name => "",
region_code => "",
region_name => "",
city => "",
zipcode => "",
latitude => "",
longitude => "",
gmtoffset => "",
dstoffset => "");
}
usleep(10000);
}
}
if ($_GET["output"]){
switch($output){
case "raw";
header('Content-Type: text/html; charset=UTF-8');
for ($i = 0; $i < sizeof($ip_geodata); $i++){
echo $ip_geodata[$i]["ip"] . ",";
echo $ip_geodata[$i]["code"] . ",";
echo $ip_geodata[$i]["country_code"] . ",";
echo $ip_geodata[$i]["country_name"] . ",";
echo $ip_geodata[$i]["region_code"] . ",";
echo $ip_geodata[$i]["region_name"] . ",";
echo $ip_geodata[$i]["city"] . ",";
echo $ip_geodata[$i]["zipcode"] . ",";
echo $ip_geodata[$i]["latitude"] . ",";
echo $ip_geodata[$i]["longitude"] . ",";
echo $ip_geodata[$i]["gmtoffset"] . ",";
echo $ip_geodata[$i]["dstoffset"];
echo "\n";
}
break;
case "json";
if ($callback){
header('Content-Type: text/html; charset=UTF-8');
echo "$callback(\n";
echo " {\n";
echo " \"Locations\": [\n";
for ($i = 0; $i < sizeof($ip_geodata); $i++){
echo " {\n";
echo " \"Id\" : \"$i\",\n";
echo " \"Ip\" : \"" . $ip_geodata[$i]["ip"] . "\",\n";
echo " \"Status\" : \"" . $ip_geodata[$i]["code"] ."\",\n";
echo " \"CountryCode\" : \"" . $ip_geodata[$i]["country_code"] . "\",\n";
echo " \"CountryName\" : \"" . $ip_geodata[$i]["country_name"] ."\",\n";
echo " \"RegionCode\" : \"" . $ip_geodata[$i]["region_code"] . "\",\n";
echo " \"RegionName\" : \"" . $ip_geodata[$i]["region_name"] . "\",\n";
echo " \"City\" : \"" . $ip_geodata[$i]["city"] . "\",\n";
echo " \"ZipPostalCode\" : \"" . $ip_geodata[$i]["zipcode"] . "\",\n";
echo " \"Latitude\" : \"" . $ip_geodata[$i]["latitude"] . "\",\n";
echo " \"Longitude\" : \"" . $ip_geodata[$i]["longitude"] . "\",\n";
echo " \"Gmtoffset\" : \"" . $ip_geodata[$i]["gmtoffset"] . "\",\n";
echo " \"Dstoffset\" : \"" . $ip_geodata[$i]["dstoffset"] . "\"\n";
if ($i == (sizeof($ip_geodata) - 1)) {
echo " }\n";
}else{
echo " },\n";
}
}
echo " ]\n";
echo " }\n";
echo ")";
}else{
header('Content-Type: text/html; charset=UTF-8');
echo "{\n";
echo " \"Locations\": [\n";
for ($i = 0; $i < sizeof($ip_geodata); $i++){
echo " {\n";
echo " \"Id\" : \"$i\",\n";
echo " \"Ip\" : \"" . $ip_geodata[$i]["ip"] . "\",\n";
echo " \"Status\" : \"" . $ip_geodata[$i]["code"] ."\",\n";
echo " \"CountryCode\" : \"" . $ip_geodata[$i]["country_code"] . "\",\n";
echo " \"CountryName\" : \"" . $ip_geodata[$i]["country_name"] ."\",\n";
echo " \"RegionCode\" : \"" . $ip_geodata[$i]["region_code"] . "\",\n";
echo " \"RegionName\" : \"" . $ip_geodata[$i]["region_name"] . "\",\n";
echo " \"City\" : \"" . $ip_geodata[$i]["city"] . "\",\n";
echo " \"ZipPostalCode\" : \"" . $ip_geodata[$i]["zipcode"] . "\",\n";
echo " \"Latitude\" : \"" . $ip_geodata[$i]["latitude"] . "\",\n";
echo " \"Longitude\" : \"" . $ip_geodata[$i]["longitude"] . "\",\n";
echo " \"Gmtoffset\" : \"" . $ip_geodata[$i]["gmtoffset"] . "\",\n";
echo " \"Dstoffset\" : \"" . $ip_geodata[$i]["dstoffset"] . "\"\n";
if ($i == (sizeof($ip_geodata) - 1)) {
echo " }\n";
}else{
echo " },\n";
}
}
echo " ]\n";
echo "}\n";
}
break;
default;
header('Content-type: text/xml');
echo "\"1.0\" encoding=\"UTF-8\"?>\n";
echo "\n";
for ($i = 0; $i < sizeof($ip_geodata); $i++){
echo " \"$i\">\n";
echo " " . $ip_geodata[$i]["ip"] ."\n";
echo " " . $ip_geodata[$i]["code"] . "\n";
echo " " . $ip_geodata[$i]["country_code"] . "\n";
echo " " . $ip_geodata[$i]["country_name"] . "\n";
echo " " . $ip_geodata[$i]["region_code"] . "\n";
echo " " . $ip_geodata[$i]["region_name"] . "\n";
echo " " . $ip_geodata[$i]["city"] . "\n";
echo " " . $ip_geodata[$i]["zipcode"] . "\n";
echo " " . $ip_geodata[$i]["latitude"] . "\n";
echo " " . $ip_geodata[$i]["longitude"] . "\n";
echo " " . $ip_geodata[$i]["gmtoffset"] . "\n";
echo " " . $ip_geodata[$i]["dstoffset"] . "\n";
echo " \n";
}
echo "\n";
break;
}
}else{
header('Content-type: text/xml');
echo "\"1.0\" encoding=\"UTF-8\"?>\n";
echo "\n";
for ($i = 0; $i < sizeof($ip_geodata); $i++){
echo " \"$i\">\n";
echo " " . $ip_geodata[$i]["ip"] ."\n";
echo " " . $ip_geodata[$i]["code"] . "\n";
echo " " . $ip_geodata[$i]["country_code"] . "\n";
echo " " . $ip_geodata[$i]["country_name"] . "\n";
echo " " . $ip_geodata[$i]["region_code"] . "\n";
echo " " . $ip_geodata[$i]["region_name"] . "\n";
echo " " . $ip_geodata[$i]["city"] . "\n";
echo " " . $ip_geodata[$i]["zipcode"] . "\n";
echo " " . $ip_geodata[$i]["latitude"] . "\n";
echo " " . $ip_geodata[$i]["longitude"] . "\n";
echo " " . $ip_geodata[$i]["gmtoffset"] . "\n";
echo " " . $ip_geodata[$i]["dstoffset"] . "\n";
echo " \n";
}
echo "\n";
}
?>
0 comments:
Post a Comment