Localisation par adresse ip en php [Fermé]

Signaler
-
 76zzz29 -
Voici mon petit probleme:
je cherche a connaitre la localisation (grossière genre pays) des personnes qui se connectent à mon site. Je sais que c'est possible car Nedstat propose un tel service et ca a l'air de marcher dans environ 90% des cas. J'essaie de faire ca en php mais je suis ouvert a tout autre langage. Je pense qu'on doit pouvoir tirer des informations de l'adresse ip, mais comment ?
Merci.

20 réponses

Le script de m2ok me localise à 20 km de chez moi alors que je vis à moins de 500m de Grenoble !
Enfin bon !
Moi j'ai trouvé (en cherchant et sans réinventer la roue)

http://ipinfodb.com/ip_location_api.php

Ils ont même la gentillesse de mettre tout le code php pour questionner leur site sur les adresses ip
Suffit de se servir !
On peut récupérer dans des variables, le pays, la région, la ville,...
14
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Le module GéoIP de belvg.com
ça repère la boucle local à laquelle tu te connectes pour accéder à Internet.
Voilà pourquoi ça te met à 20km au lieu de 500m...
No comments

<?
$a=array();
// get real ip adress
@detectProxy($a);
$ip_avant = $a['IP'];
//get localisation
$ip2country = @ip2country($ip_avant);

print_r($ip2country );

function ip2country($ipadress)
{
$surl = "https://whatismyipaddress.com/ip-lookup";
$data = "LOOKUPADDRESS=" . $ipadress;
$geolocalisation = do_post_request($surl, $data);
preg_match("#<font class='block-title'>Geo-Location Information<font size=2></B></font></font><P><UL>(.*?)</TABLE>#is", $geolocalisation, $mylocalistion, PREG_OFFSET_CAPTURE);
preg_match("#<TR><TD>Country</TD><TD>(.*?)<#is", $mylocalistion[1][0], $country, PREG_OFFSET_CAPTURE);
preg_match("#<img src=\"(.*?)\"#is", $mylocalistion[1][0], $countryimg, PREG_OFFSET_CAPTURE);
preg_match("#<TR><TD>City</TD><TD>(.*?)</TD>#is", $mylocalistion[1][0], $city, PREG_OFFSET_CAPTURE);
$a = array ("country" => trim($country[1][0]), "city" => trim($city[1][0]), "countryimg" => trim($countryimg[1][0]));
return $a;
}

function do_post_request($url, $data, $optional_headers = null) {
$start = strpos($url,'//')+2;
$end = strpos($url,'/',$start);
$host = substr($url, $start, $end-$start);
$domain = substr($url,$end);
$fp = pfsockopen($host, 80);
if(!$fp) return null;
fputs ($fp,"POST $domain HTTP/1.1\n");
fputs ($fp,"Host: $host\n");
if ($optional_headers) {
fputs($fp, $optional_headers);
}
fputs ($fp,"Content-type: application/x-www-form-urlencoded\n");
fputs ($fp,"Content-length: ".strlen($data)."\n\n");
fputs ($fp,"$data\n\n");
$response = "";
while(!feof($fp)) {
$response .= fgets($fp, 1024);
}
fclose ($fp);
return $response;
}

function detectProxy(&$ar)
{//begin of function
$gotcha=false;
if(array_key_exists('HTTP_X_FORWARDED_FOR',$_SERVER) || array_key_exists('HTTP_PROXY_CONNECTION',$_SERVER) || array_key_exists('HTTP_VIA',$_SERVER))
{$gotcha=TRUE;}

$gotcha = (stristr($_SERVER['REMOTE_HOST'],"proxy") !== FALSE ) ? TRUE : $gotcha ;

if($gotcha)
{
$ar['PORT']= (array_key_exists('REMOTE_PORT',$_SERVER) ? $_SERVER['REMOTE_PORT'] : "unknown");
$ar['HOST']= (array_key_exists('REMOTE_HOST',$_SERVER) ? $_SERVER['REMOTE_HOST'] : "unknown");
$ar['IP']= (array_key_exists('REMOTE_ADDR',$_SERVER) ? $_SERVER['REMOTE_ADDR'] : "unknown");
$ar['FORWARDED_FOR']=(array_key_exists('HTTP_X_FORWARDED_FOR',$_SERVER) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : "unknown");
$ar['INFO']= (array_key_exists('HTTP_VIA',$_SERVER) ? $_SERVER['HTTP_VIA'] : "unknown");
}
else
{
$ar['PORT']= (array_key_exists('REMOTE_PORT',$_SERVER) ? $_SERVER['REMOTE_PORT'] : "unknown");
$ar['HOST']= (array_key_exists('REMOTE_HOST',$_SERVER) ? $_SERVER['REMOTE_HOST'] : "unknown");
$ar['IP' ]= (array_key_exists('REMOTE_ADDR',$_SERVER) ? $_SERVER['REMOTE_ADDR'] : "unknown");
}
return $gotcha;

}//end of function

?>
super, et le jour où le site d'origine change sa mise en page c'est mort
Voici le code php permettant de recuperer le pays, la region, la ville, la longitude et la lattitude par l'ip d'un visiteur
Seul probléme on ne peut soumettre que 25 demandes / jour
Cela conviendra au petit site souhaitant permettre une inscription prés-remplie

<?php
$ip=$_SERVER["REMOTE_ADDR"];
// Initialisation de la page vers laquelle on poste
$url = 'http://www.maxmind.com/app/lookup_city';

// Mis en forme des valeurs postees
$post = array(
'ips' => $ip
);

//Mise en place du POST
$postdata = '' ;
foreach( $post as $name => $value ) {
$postdata .= $name . '=' . $value . "&" ;
}

// Creation du tableau d'option
$opts = array( 'http' =>
array (
'method' => 'POST',
'header' => 'Content-type: application/x-www-form-urlencoded',
'content' => $postdata
)
);

// Creation du contexte
$context = stream_context_create($opts);

// Recuperation d une page en methode post
$http_page = file_get_contents($url,false,$context);

// Nettoyage du code recupere
$http_page=eregi_replace("<!DOCTYPE(.+)$ip","",$http_page);
$http_page=eregi_replace("</table>(.+)</html>","",$http_page);
$http_page=str_replace('</font></td>','',$http_page);
$http_page=str_replace('</tr>','',$http_page);
$http_page=explode('<td><font size="-1">',$http_page);

//Recuperation des valeurs dans le tableau
$country_alpha2=$http_page[1];
$country=$http_page[2];
$region=$http_page[4];
$ville=$http_page[5];
$latitude=(float)$http_page[7];
$longitude=(float)$http_page[8];

//Affichage des resultats
echo 'country_alpha2:'.$country_alpha2.'<br>';
echo 'country:'.$country.'<br>';
echo 'region:'.$region.'<br>';
echo 'verif:'.$ville.'<br>';
echo 'latitude:'.$latitude.'<br>';
echo 'longitude:'.$longitude.'<br>';
?>
J'ai réaliser et utilises un script qui marche très bien.
Il suffit d'indiquer l'IP et le script retourne la ville de provenance du visiteur. Il est facilement maniable en PHP.

<?php  
$ip = "l'ip à géolocaliser";  
$script = "http://********/geoloc/geo.php?IP=";  
$retour = file_get_contents($script.$ip);  
echo $retour;  
?>
Messages postés
16
Date d'inscription
mercredi 31 mars 2010
Statut
Membre
Dernière intervention
20 octobre 2017

bonjour ..
je n'y connais RIEN dans les scripts et autres ..
mais j'ai besoin de localiser précisément l'expéditeur de messages que je reçois régulièrement.
j'ai son Ip et son pays mais pas sa ville ou localisation précise et c'est vraiment urgent...

je suis allée sur ton blog mais c'est trop technique pour moi .. ;o)

peux tu m'aider stp ?
je n'ai pas trouver comment t'adresser un message privé ici pur te donner mon msn ou mon mail ...

Cordialement
Messages postés
307
Date d'inscription
mardi 20 mars 2007
Statut
Membre
Dernière intervention
17 février 2011
55
J'ai essayé ce petit bout de script... je me connecte de Paris, ça me retourne que je me connecte de Buenos Aire...
trop lent, il faut attendre au moins 2 ou 3 secondes avec ce script
je l'ai testé ce script . le problème chez moi s'est que file_get_contents ne fonctionne pas sur mon hebergeur ou alors le site d'origine ( http://www.ieducatif.fr/geoloc/....) a placé une restriction . le seul moyen est un iframe et bouh caca les iframes .... mais sinon il me localise bien a la bonne adresse .
Bonjours ayant lu les réponses (certaines pertinentes d'autre pas ...) j'ai trouvé un tuto en français pour intégrer la géolocalisation à votre site ( ce n'est pas comparable à Google Analytics mais peut faire l'affaire pour des cas bien précis).

Les plus de cette méthode :
- Permet de cibler et d'enregistrer dans une base de données (ou fichier si ça vous fais plaisir !) la ville, le code postal, le pays, la latitude et la longitude du visiteur en manipulant facilement le code que l'on donne.
- très facile d'intégration,
- permet d'être super classe avec une carte du monde en le couplant à Google Maps.

Les moins :
- c'est comme tout, rien n'est facile, il faut avoir des compétences en PHP.
- Il y a deux versions une gratuite limité à une trentaine d'informations,
l'autre est payante.


! IMPORTANT : les ip dynamiques ne peuvent être localiser avec précision, les ip fixe oui avec une précision de 2 à 20 km il me semble

La méthode est bien sur optimal pour l'enregistrement des information d'administration sinon elle sert à rien puisque Google Analytics fait très bien les statistiques visiteurs.

J'ai failli oublier le lien du tuto :)

http://www.siteduzero.com/tutoriel-3-306955-geolocalisez-vos-visiteurs-grace-a-leur-ip.html

Bonne intégration

Skim
Bonjour,
J'ai été confronté a un problème similaire, je devait situer géographiquement un internaute.
Après une rapide recherche sur le web, j'ai finalement opté pour l'API de google Map.
Le lien suivant explique la technique dans le détail:

http://briancray.com/2009/05/29/find-web-visitors-location-javascript-google-api/

Cette solution implique d'obtenir une AJAX Search API Key disponible gratuitement au lien suivant:

http://code.google.com/intl/fr-FR/apis/ajaxsearch/signup.html
Bonjour,

Merci beaucoup pour l'info !
Ca fonctionne tres bien, je compte l'utiliser sur mes sites web pour faire de la pub locale ....



Filmip
Http://www.ak1-fun.com
api de google pas du tout précis, se trompe de 10 km et quelques parfois !
@personne : comme dit plus haut, l'IP correspond à la boucle locale à laquelle tu te connectes.
Bonjour,

Je sais que le post est vieux, mais bon il ressort encore sur GG donc ...
Je pense même que cette réponse est déjà sur CCM, enfin bref il existe une API Web de géolocalisation ip sur https://www.geolocalise-ip.com/ et testé par des potes et moi.
Pas grand chose à dire parce que cela fonctionne bien, si ce n'est la limitation à 50 requêtes par jour en gratuit.
Essaie aussi http://www.biclim.fr
Messages postés
2
Date d'inscription
lundi 24 janvier 2011
Statut
Membre
Dernière intervention
24 janvier 2011
1
<?php 
002 function getPage($link){ 
003      
004    if ($fp = fopen($link, 'r')) { 
005       $content = ''; 
006           
007       while ($line = fread($fp, 1024)) { 
008          $content .= $line; 
009       } 
010    } 
011   
012    return $content;  
013 } 
014   
015 function pingLink($domain){ 
016     $file      = @fopen($domain,"r"); 
017     $status    = -1; 
018   
019     if (!$file) { 
020        $status = -1;  // Site is down 
021     } 
022     else { 
023         $status = 1; 
024         fclose($file); 
025     } 
026     return $status; 
027      
028 } 
029   
030 function checkPage($content){ 
031    $links = array(); 
032      
033    if (strlen($content) > 10){ 
034       $startPos = 0; 
035       while (strpos($content,'<a ',$startPos)){ 
036          $spos  = strpos($content,'<a ',$startPos); 
037          $tmppos = strpos($content,'>',$spos); 
038          $spos  = strpos($content,'href',$spos); 
039          $spos1 = strpos($content,'"',$spos)+1; 
040          $spos2 = strpos($content,"'",$spos)+1; 
041          if ($spos2 < $spos1) $spos = $spos2; 
042          else $spos = $spos1; 
043   
044          $epos1 = strpos($content,'"',$spos); 
045          $epos2 = strpos($content,"'",$spos); 
046          if ($epos2 < $epos1) $epos = $epos2; 
047          else $epos = $epos1; 
048            
049          $startPos = $epos; 
050          $link = substr($content,$spos,$epos-$spos); 
051          if (strpos($link,'http://') !== false) $links[] = $link; 
052       } 
053    } 
054      
055    return $links; 
056 } 
057   
058 ?> 
059   
060 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "DTD/xhtml1-transitional.dtd"> 
061 <html> 
062 <head> 
063    <title>Micro Link Checker</title> 
064    <link href="style/style.css" rel="stylesheet" type="text/css" /> 
065 </head> 
066 <body> 
067     <div id="main"> 
068       <div id="caption">LINK STATUS</div> 
069       <div id="icon"> </div> 
070       <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post" name="domain" id="domain"> 
071           
072         <table width="100%"> 
073           <tr><td>URL to check:</td><td><input class="text" name="myurl" type="text" size="45"></td></tr> 
074           <tr><td align="center" colspan="2"><br/><input class="text" type="submit" name="submitBtn" value="Check links"></td></tr> 
075         </table>  
076       </form> 
077 <?php    
078     if (isset($_POST['submitBtn'])){ 
079          $url = isset($_POST['myurl']) ? $_POST['myurl'] : ''; 
080          if (!(strpos($url,'http://') === 0) ) $url = 'http://'.$url; 
081   
082 ?> 
083       <div id="caption">RESULT : <?php echo $url; ?></div> 
084       <div id="icon2"> </div> 
085       <div id="result"> 
086         <table width="100%"> 
087 <?php 
088          $txt = getPage($url); 
089          $linkArray = checkPage($txt); 
090          foreach ($linkArray as $value) { 
091             if (pingLink($value) <= 0){ 
092                $status = "INVALID"; 
093             } else { 
094                $status = "OK"; 
095             } 
096             echo "<tr><td align='left'>$value</td><td>$status</td></tr>"; 
097             sleep(2); 
098             @ob_flush(); 
099             flush(); 
100          } 
101   
102 ?> 
103         </table> 
104      </div> 
105 <?php            
106     } 
107 ?> 
108     <div> 
109 </body>   


[Publicité supprimée Modération CCM
Bon alors dans celui là il ne s'agit pas d'ip mais d'url et il recence les différents services d'une adresse . Genre google il te renvoie l'url de video maps news mails ...
bonjour
Je suis alle sur ton site la geolocalisation est bonne pour le pays mais pas pour la ville.
j'au voulu remplir le questionaire mais impossible de terminer, le serveur me demande toujours de mettre un code, que je mets evidement et qu'il trouve a chaque fois inexact.
La ville indique est quand meme a 800 km de chez moi lol
See you soon
Pour les webmasters qui le désirent, je fournis un script PHP sur mon site Internet http://www.WeLive.fr dans la rubrique Géolocalisation par IP.
Le script PHP vous retourne les informations sous forme de variables PHP : Pays, Drapeau du pays, Région-Département-Code Postal pour la France, Ville.
Celui-ci nécessite une inscription préalable aux fins d'éviter que n'importe qui l'utilise.

A bientôt

WeLive.fr
Bonsoir,



Le code ne semble pas passer chez moi; je l'ai collé dans le footer et rien n'apparait...

Une suggestion?

Cordialement.

Jean-Marie Mihelic
Messages postés
123
Date d'inscription
dimanche 6 avril 2008
Statut
Membre
Dernière intervention
23 février 2010
12
c'est bien gentil WeLive.fr mais comment ton script peut-il fonctionner quand les gens ont une IP virtuelle par dyndns?
Salut,
J'ai utilisé l'API PHP de MaxMind pour gélocaliser une adresse IP. Je l'affiche ensuite sur une carte Yahoo! Maps grâce à une application Adobe Flex. Toutes les étapes de l'installation et les scripts PHP sont présentés:
http://www.flex-tutorial.fr
Messages postés
7
Date d'inscription
vendredi 26 octobre 2007
Statut
Membre
Dernière intervention
31 juillet 2010

Regarde ici tous simplement !!!
http://belkhersite.hebergratuit.com/details.php?Article=11
t'as rien compris toi ...
quel cancre, ça doit être le jeune âge...
Messages postés
1
Date d'inscription
vendredi 9 décembre 2011
Statut
Membre
Dernière intervention
9 décembre 2011

Bonjour,

Avez vous un code complet qui fonctionne?

Mon objectif est de récupérer le nom de la ville dans une variable à partir de la personne qui c'est connecté à mon site.
car je dois rechercher dans ma Base l'association d'echec la plus proche de chez lui.

J'ai 62 ans, et franchement je ne comprends pas pourquoi cela ne fonctionne pas.

Est ce que l'un d'entre vous à une solution simple .

Einstein disait "faites simple simplement mais pas simpliste".
<script language="Javascript" src=" http://map.geoup.com/geoup?template=welcome"></script>

je pense que ça doit marcher essaie le
Messages postés
4
Date d'inscription
jeudi 10 janvier 2002
Statut
Membre
Dernière intervention
17 octobre 2002

Merci pour le tuyau, ca marche bien. Je me demande quand même comment ils font, et évidemment pas moyen de voir leurs sources...
J'ai installé un système de géolocalisation sur mon site Internet : http://www.welive.fr
welive = nul, page pourrie bourrée de pub et ne proposant rien sans inscription... pour ensuite avoir quoi puisqu'il existe déjà pleins de sites très bien cités ici...
comment localisé le pay d'une photo
en étant un peu moins con...
Messages postés
4
Date d'inscription
mardi 11 décembre 2007
Statut
Membre
Dernière intervention
2 avril 2009

L'outil Google Analytics te permet de faire la géolocalisation par continent, pays, et même ville.
C'est très simple à implémenter (juste un javascript à coller), et ça marche bien, si tu veux pas trop t'embêter je conseille de faire le suivi des visites par une application tierce-partie comme celle là.

A+
déjà précisé plus haut, google pas précis
bonjour j'aimerais avoir sur mon forum a chaque fois que les membres écrive un drapeaux qui s'affiche de leur pays c'est possible ?et comment faire merci
tu sais à peine t'exprimer et tu fais un site... voila pourquoi le web est une poubelle aujourd'hui ! Sinon, tu voudrais pas qu'on fasse le boulot à ta place desfois?
sa c fai !
Oui et c'est aussi parce qu'il y a toujours quelqu'un pour critiquer l'autre, au lieu de se taire, que l'homme finit toujours par se taper dessus et à déclencher des guerres stupides. Think before speaking ! (pour georges)
bonjour, je voudrai savoir s'il etait possible d'avoir le code du site WeLive juste pour la localisation grace a l'IP. ou un autre code mais aussi precis que ce site au nievau de la ville. je trouve cela tres interessant pour savoir ou lancer une campagne de publicté pour une entreprise. cela serai mi coté administrateur enregistrer dans une bd.
laisse tomber c'est nul welive
Autant prendre google analytics !
n'importe quoi, autant prendre photoshop tant qu'on y est
Là tu vas trouver ton bohneur

http://www.2enetworx.com/

Yota238
t'as rien compris non plus toi ...
Bonjour à toutes et tous,
Pour ma part, j'ai absolument besoin d'un système de géolocalisation très précis ( avec une marge d'erreur inférieure à 100 mètres).
Car dans le cadre de la création de mon site " communautaire" il faut que je puisse indiquer à chaque membres la distance qui les séparent les uns des autres.
Dans cette optique connaissez-vous et utilisez-vous le système mis en place sur le site " adopte un mec"? Et si oui, est il viable et gratuit? Merci pour vos réponses et votre intérêt!
> Nayliss
cela demanderais que chacun donne sa localisation luis même et que tu face toi même une base de données énorme qui localiserais chaque ip enregistrée mais la encore on se retrouve face au problème des ip dynamique. un ip ne peut pas être plus précise que le relais ou elle est branché (la boucle local). certaine ip sont anonyme et ne donne comme localisation proxy anonyme (même sans proxy), il existe des plages d'ip qui sont donée a un emplacement géographique (c'est ce qu'utilise la plupart des localisateur ip)
moi j'utilise les plage ip et j'exclue une par une les ip que je sait dynamiques, je remplace les nombre pour qu'ils soit tous complet (exemple 27.18.567.43 (cette ip n'existe pas car elle contient un nombre supérieur a 255) j'utilise une expression régulière en php pour la transformé en 027.018.567.043 puis un $ip=str_replace(".","",$ip);
pour supprimé les point(on a donc 027018567043) et la on en fait un simple nombre ce qui fait 27018567043 (sa a juste supprimé le premier 0 mais il est pas important celui la)
puis je le compare au ip de ma base de données (qui ont aussi été mis au format de simple nombre)et la , il y a plus qu'à faire quelques étape rapide.

// 1 si c'est une ip dynamique, on saute la suite, la on peut riens faire.
// en code c'est juste un
if ($ip=="une ip dynamique" || $ip=="une autre ip dynamique" [et encore avec toute les ip dynamique]) {echo "nous n’avons pas pu vous localisé"}
// 2 sinon se n'est pas une ip dynamique on vérifi les plage de donéeet on la localise
else
{
if( $ip>=(début de plage d'ip) && $ip<=(fin de plage de donée){echo "ville correspondante";
if( $ip>=(début d une autre plage d'ip) && $ip<=(fin de l'autre plage de donée){echo "ville correspondante";
...
}

ma base de donnée est un simple fichier text avec une ip par ligne pour les ip dynamique
et un autre fichier text avec une ip par ligne sur 2 lignes séparé par une ligne vide pour les plages d'ip et pour le if, j'ai fait une boucle PHP qui compte le nombre de retour a la ligne pour connaitre le nombre d'ip enregistrée et la récupérer a chaque fois pour écrire toute les ip dynamique a viré automatiquement. (j'utilise uniquement PHP pour lire du txt, pas besoin de base de données SQL mais rien n’empêche d'en utilisé une)

pour récupérer son ip dans $ip j'utilise sa qui en plus renvoi si on utilise un proxy
$ipproxy="";
$ipprox="";
$proxy=0;
if (isset($_SERVER['HTTP_CLIENT_IP'])){
$ipclient=$_SERVER['HTTP_CLIENT_IP'];
$ipprox=" et vous utilisez un internet partager d'addresse: ";
$ipprox.=$_SERVER['REMOTE_ADDR'];
$proxy=1;
}
if (isset($_SERVER['HTTP_X_FORWARDED_FOR'])){
$ipclient=$_SERVER['HTTP_X_FORWARDED_FOR'];
$ipproxy=" et vous utilisez un proxy d'adresse: ";
$ipproxy.=$_SERVER['REMOTE_ADDR'];
$proxy=1;
}
if($proxy==0) {
$ipclient=$_SERVER['REMOTE_ADDR'];
$ipproxy=" et vous utilisez n'utilisez aparement pas de proxy";
}
echo "<p>votre IP est: " ;echo $ipclient;echo $ipprox; echo $ipproxy ;echo "</p>" ;

(source du code de récuperation de l'ip http://76zzz29.freeboxos.fr/login)

ajoutez juste un $ip=$ipclient si vous ne voulez rien changer sinon remplacer l'un par l'autre(places sa avant la localisation) remplacez juste le echo "<p>votre IP est: " ;echo $ipclient;echo $ipprox; echo $ipproxy ;echo "</p>" ;
par le scripte de localisation