IP et géolocalisation [Résolu]

Signaler
Messages postés
11
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
9 juin 2009
-
Messages postés
11
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
9 juin 2009
-
Bonjour à tous,

je suis en train de mettre en place un site qui sera disponible en plussieurs langues et pour ce faire j'utilise la géolocalisation en fonction de l'IP ( jusque là rien de particulier)

Pour traiter ce problème j'ai sous le coude 2 solutions qui "à priori" fonctionnent bien toutes les 2

une qui utilise le découpage de l'adresse IP comme ceci :

<?php
$_host=gethostbyaddr($_SERVER['REMOTE_ADDR']);
$_ip_dec=explode( ".", $_host);
$_tab=count($_ip_dec);
$_code_pays=$_tab_[$_ip_dec-1];  
?>

ici on récupère l'extension du FAI comme  monfai.fr  soit ".FR" un tableau, un fichier .csv ou une petite table de 270 enregistrements permet de traiter les correspondances .extension avec le Nom du Pays

2nde solution récupérée ici : http://ip-to-country.webhosting.info/node/view/5

propose de comparer l'adresse IP sous forme numérique avec celles contenues dans une base de données
chaque IP, si elle est comprise entre telle et et telle valeur, correspond à tel pays.
gros problème : la base contient environ 79500 enregistrements !

Ma question est simple :
La 1ere solution est elle aussi fiable que la 2nde ?
Tous les FAI ont ils une extension correspondant à leur pays resectifs ?
ou la 2nde n'est elle pas trop lourde pour arriver finalement à un résultat équivalent ?
La 2nde solution est du type empirique et tend à grossir la base de données avec le temps.

Merci d'avance.

4 réponses

Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Re,

Ok.

"Tous les FAI ont ils une extension correspondant à leur pays resectifs ?"
=> Non. Enfin les FAI, peut-être, encore que... A une époque, mon nom d'hôte quand j'étais chez Nerim se terminait par nerim.net : donc pas de localisation d'après ça.
Par ailleurs, pour les réseaux d'entreprises qui se connectent via un serveur dont le nom d'hôte est en .com, .net, .org ou autre... ça ne marche encore pas.
Cependant, ce cas particulier reste, je pense, assez rare... Enfin faudrait faire des stats pour ça.

La base de 79000 enregistrements ne me parait pas trop lourde. Tu utilises sûrement un serveur MySQL... ? Il en faut plus que ça pour lui faire mal. Si ta base de données est correctement indexée, la requpete ne prendra que quelques centièmes de seconde... Une fois que tu as déterminé le pays, il suffit de le mettre en cache dans une variable de session, ça évite d'interroger la base à chaque fois pour le même utilisateur.

Ma conclusion : 79000 enregistrement pour une table, c'est pas énorme (ça prend de l'espace disque mais c'est tout). Du coup, mieux vaut privilégier la méthode la plus efficace, celle qui te garantie au mieux le résultat que tu veux.
Messages postés
2483
Date d'inscription
jeudi 30 novembre 2006
Statut
Membre
Dernière intervention
14 janvier 2011
18
Salut,

Mon avis perso, c'est que la géolocalisation pour gérer l'i18n d'un site, c'est pas la solution.
Je suis à l'étranger, je me connecte sur ton site depuis un cybercafé avec mon portable. Tu me colles ta traduction allemande alors que j'y pige que dalle, et que j'aimerais bien l'avoir en français tant qu'à faire merci parce que quand même.

La solution serait, à mon avis, de se baser sur la variable d'environnement $_SERVER['HTTP_ACCEPT_LANGUAGE']
La valeur de cette variable ressemble à quelque chose comme ça :

fr-fr,fr; q=0.8,en-us; q=0.5,en; q=0.3

Là, tu as une vraie information fiable, puisque les langues que tu récupères sont liées à l'utilisateur (la personne), donc à son choix à lui.

A partir de cette chaine, tu extraits les langues et pour chacune (en commençant pas la "préférée", c'est à dire celle pour laquelle la valeur de q est la plus grande) tu vérifies si tu as des fichiers de langue correspondants. Si oui, tu as ta traduction. Sinon, tu affiches avec la langue par défaut.
C'est tellement simple que les quelques scripts qui existent font moins de 10 lignes.
Messages postés
11
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
9 juin 2009

Bonjour neigedhiver,

merci pour ta réponse mais malheureusement ce type de solution est insuffisant dans mon cas, ce que j'utilise en général ( récup la langue du visiteur ) ici n'est pas adapté.
La langue n'est pas en fait mon souci puisque ce sera à peu près Francais ou anglais ( et peut être espagnol et allemand plus tard ) que l'on pourra choisir quelque soit le pays d'où on se connecte,  c'est vraiment le pays d'origine que je cherche à définir.
Le site a une vocation commerciale et certains tarifs ne peuvent être affichés de la même façon pour un visiteur de République Tchèque que pour un visiteur Luxembourgeois, pouvoir d'achat oblige !
Pour cela il existe des tables d'indice du coût de la vie de chaque pays pour relativiser, mais il faut tout de même définir clairement le pays de connexion.

Un Français qui s'inscrit sur le site et paie son abonnement ne va pas aller tous les 4 matins à l'étranger, et même si c'était le cas l'abonnement une fois réglé est réglé.
Bien sûr il existera toujours des solutions pour payer moins cher comme se connecter via un serveur placé dans un pays étranger mais ce n'est pas du commun des mortels.

Ma question reste donc entière : est il préférable d'utiliser la solution 2 car plus précise ou la solution 1 ( utilisant l'extension du FAI ) plus légère et tout aussi efficace ?
Messages postés
11
Date d'inscription
samedi 13 janvier 2007
Statut
Membre
Dernière intervention
9 juin 2009

Merci neigedhiver,

je pense que je vais finalement opter pour la grosse BDD, oui j'utilise MySQL
En fait je lai déjà testé en ligne cette base, je n'ai rien remarqué au niveau latence, ca semble répondre du tacotac ( OVH )

Merci pour ton commentaire sur la perf de MySQL, c'est bien là que j'avais un doute ^^