<?php $ip=""; header('Content-Type: text/plain; charset=utf-8'); if (!empty($_SERVER['HTTP_CLIENT_IP'])) { $ip=$_SERVER['HTTP_CLIENT_IP']; } elseif (!empty($_SERVER['X-Real-IP'])) { $ip=$_SERVER['X-Real-IP']; } elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) { $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; } else { $ip=$_SERVER['REMOTE_ADDR']; } $ip=preg_replace("/^::ffff:/", "", $ip); /** * Optimized algorithm from http://www.codexworld.com * * @param float $latitudeFrom * @param float $longitudeFrom * @param float $latitudeTo * @param float $longitudeTo * * @return float [km] */ function distance($latitudeFrom, $longitudeFrom, $latitudeTo, $longitudeTo){ $rad = M_PI / 180; $theta = $longitudeFrom - $longitudeTo; $dist = sin($latitudeFrom * $rad) * sin($latitudeTo * $rad) + cos($latitudeFrom * $rad) * cos($latitudeTo * $rad) * cos($theta * $rad); return acos($dist) / $rad * 60 * 1.853; } if(isset($_GET["isp"])){ $isp=""; try{ $json = file_get_contents("https://ipinfo.io/".$ip."/json"); $details = json_decode($json,true); if(array_key_exists("org",$details)) $isp.=$details["org"]; else $isp.="Unknown ISP"; if(array_key_exists("country",$details)) $isp.=", ".$details["country"]; $clientLoc=NULL; $serverLoc=NULL; if(array_key_exists("loc",$details)) $clientLoc=$details["loc"]; if(isset($_GET["distance"])){ if($clientLoc){ $json = file_get_contents("https://ipinfo.io/json"); $details = json_decode($json,true); if(array_key_exists("loc",$details)) $serverLoc=$details["loc"]; if($serverLoc){ try{ $clientLoc=explode(",",$clientLoc); $serverLoc=explode(",",$serverLoc); $dist=distance($clientLoc[0],$clientLoc[1],$serverLoc[0],$serverLoc[1]); if($_GET["distance"]=="mi"){ $dist/=1.609344; $dist=round($dist,-1); if($dist<15) $dist="<15"; $isp.=" (".$dist." mi)"; }else if($_GET["distance"]=="km"){ $dist=round($dist,-1); if($dist<20) $dist="<20"; $isp.=" (".$dist." km)"; } }catch(Exception $e){} } } } }catch(Exception $ex){ $isp="Unknown ISP"; } echo $ip." - ".$isp; } else echo $ip; ?>