Contrairement à ce que l'on pourrait, croire l'Internet est tout sauf anonyme. Ainsi, il est possible de connaître le IP du client et de connaitre naturellement le IP du serveur, deux éléments en apparence anodins, mais combien lourds de conséquence quand viens le temps de retracer quelqu'un. Donc l'idée est simple, on demande au PHP de nous indiquer le IP du serveur et du client, ensuite on demande au GeoIP de nous fournir la longitude et la latitude et enfin on applique le calcul de la distance à partir de ceux-ci.
Pour connaître le IP du serveur Web IIS avec PHP, voici la variable à utilisé :
$ServeurIP = $_SERVER["LOCAL_ADDR"];
Pour connaitre le IP du serveur Web Apache avec PHP, voici la variable à utilisé :
$ServeurIP = $_SERVER["SERVER_ADDR"];
Pour connaitre le IP du client, voici la variable à utilisé :
$ClientIP = $_SERVER["REMOTE_ADDR"];
Malheureusement c'est là que ça se gâte, il suffit simplement d'avoir GeoIP pour connaître la longitude et la latitude d'un IP, mais c'est une licence commerciale, il n'y a pas moyen pour un étudiant par exemple de l'avoir gratuit... Cependant si vous avez la chance d'avoir cette magnifique BD d'IP, vous n'avez qu'à faire ceci :
$gicity = geoip_open("geoipcity.dat",GEOIP_STANDARD);
$Record = geoip_record_by_addr($gicity,$ServeurIP);
$ServeurIPLattitude = $Record->latitude;
$ServeurIPLongitude = $Record->longitude;
$Record = geoip_record_by_addr($gicity,$ClientIP);
$ClientIPLattitude = $Record->latitude;
$ClientIPLongitude = $Record->longitude;
Enfin, voici donc la fabuleuse formule permettant de calculer la distance entre vos deux IP :
$a1 = doubleval($ServeurIPLatitude)*pi()/180;
$b1 = doubleval($ServeurIPLongitude)*pi()/180;
$a2 = doubleval($ClientIPLattitude)*pi()/180;
$b2 = doubleval($ClientIPLongitude)*pi()/180;
$RawDelta = acos(cos($a1)*cos($b1)*cos($a2)*cos($b2) + cos($a1)*sin($b1)*cos($a2)*sin($b2) + sin($a1)*sin($a2));
$DeltaKM = $RawDelta * 6378.0;
$DeltaStatuteMiles = $RawDelta * 3963.1;
$DeltaNauticalMiles = $RawDelta * 3443.9;
En terminant vous remarquerez que la variable «$DeltaKM» contient le nombre de Kilomètre entre les deux IPs; la variable «$DeltaStatuteMiles» tant qu'à elle contient le nombre de mille de distance entre les deux IPs et enfin la variable «$DeltaNauticalMiles» contient le nombre de Miles Nautiques entre les deux IPs.