Avatar billede minoza Nybegynder
10. februar 2012 - 11:19 Der er 3 kommentarer og
1 løsning

IP til land

Hejsa, jeg er ved at opbygge en lille fin database hvor jeg registrerer mine brugere efter IP adresse. Jeg vil gerne vise både deres land som tekst og som flag baseret på denne ip adresse. Jeg ved at der er mange ip-to-country sider hvor man kan gøre dette, men jeg kunne nu godt tænke mig at køre det hele i mit eget php script.

Jeg ved at f.eks. http://geolite.maxmind.com
deler gladeligt ud af deres ip-to-country database her: http://geolite.maxmind.com/download/geoip/database/

Jeg ved bare ikke hvordan jeg skal gribe det an, og om der findes en nemmere måde? De variabler jeg er på udkig efter skulle gerne returneres som f.eks.: Denmark, DK. Det ved jeg at geolite's database gør (når man ved hvordan).

Er der nogen der kan hjælpe mig godt igang?
Avatar billede claes57 Ekspert
10. februar 2012 - 11:49 #1
bare tag det datasæt - der er 6 kolonner.
de første 2 er ip-adresse interval - det er dumt at søge på.
de næste 2 er ip-adresserne omregnet til et tal - det er det, du skal gøre med din brugers ip, og søge her.
så kommer 2 kolonner med land-id og navn, som skal returneres.

omregning fra ip-adresse til tal:
det første tal ganger du med 256
læg tal 2 til, og gang med 256
læg tal 3 til og gang med 256
læg tal 4 til, og du har det unikke tal, der kan søges efter - du skal bare finde en post, hvor kolonne3 er mindre og kolonne4 er større end det beregnede tal.
Avatar billede olebole Juniormester
10. februar 2012 - 14:36 #2
<ole>

Læs arne_v's fortrinlige guide om geolocation med PHP

/mvh
</bole>
Avatar billede minoza Nybegynder
13. februar 2012 - 09:09 #3
tak for foreslagene :-) Arnes kode er dog et par grader over mine evner, så jeg måtte opgive at forstå koden efter lang tids bøvlen med ikke at kunne få det til at virke. Jeg fik dog en skabelon og et udgangspunkt, så mange tak!

jeg har fået det til at virke med denne kode:

include("geoip.inc");
include("countries.php");
$geoDB = geoip_open("GeoIP.dat", GEOIP_STANDARD);
$iploc  = geoip_country_code_by_addr($geoDB, $IP);
$Country = $countries[$iploc][1];
$Host = gethostbyaddr($IP);

den returnerer så fint med DENMARK etc. Og så er det lige jeg løb ind i et andet problem. Den returnerer lande som UNITED STATES o.lign med mellemrum, det er fint når landet skal læses på skærmen, men jeg har problemer med at få det til at virke når jeg samtidig refererer til et gif billede af samme navn, dem hvor der er mellemrum i nevnet bliver ikke vist? her er min lille kode til flagene:

$flag = $row['Country'] . ".gif";
list($width, $height, $type, $attr) = getimagesize("Flags/" . $flag);
$f = 30 / $height;
$h = $height * $f;
$w = $width * $f;
echo "<img src = Flags/" . $flag . " align='middle' valign='top' width=" . $w . "px height=" . $h ."px> </th></tr>";

$row['Country'] er landet returneret fra GeoIP's database, jeg opbevarer dem og henter dem fra egen database.

Nogen gode råd? ... hov og smid lige et svar begge to så i kan dele pointene :-)
Avatar billede claes57 Ekspert
13. februar 2012 - 10:10 #4
med str-replace
http://php.net/manual/en/function.str-replace.php
kan du fjerne alle mellemrum, og dermed få et brugbart navn til din gif.
det er kun linjen
$flag = $row['Country'] . ".gif";
der skal tilrettes
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester