speedtest/getIP.php

69 lines
2.8 KiB
PHP

<?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;
?>