Main /

Geo IP

Geo IP

GeoIP-Dienst für die eigene Webseite (PHP)

Wer braucht trotz Google-Analytics noch sowas? - Ich,Andi - und zwar zur Skriptlaufzeit und nicht irgendwo her...

Hintergrundstory

Gestern Abend wollte ich eine Ländererkennung in eine Webseite einbauen um gewisse Bezahldienste für bestimmte Länder gar nicht erst anzubieten. Das ganze findet statt auf einem Apache mit PHP 5.x und einer MySQL 5.x. Gute Vorraussetzungen also.
Ja, die Armee der Besserwisser hebt die Zeigefinger: Wieso, das machen die Bezahldienste doch alles alleine? - Klar Leute, geht weiter youtube-Videos gucken... winking smiley

Was macht ein GeoIP-Dienst ?

Ein GeoIP-Dienst ist in der Lage einer IP eines Webseitenbesuchers mit einer gewissen Sicherheit dem jeweiligen Herkunftsland zu zuordnen. Also kommt der Besucher aus Deutschland würde der ein DE zurückliefern, bei Dänemark dann ein DK usw,usw...

Auf gehts: eigenen GeoIP-Dienst in 10 Minuten bauen...

Die folgenden Schritte setzen Grundkenntnisse in PHP und SQL vorraus. Ach ja, da ich im Büro schon jeden Tag mit SOAP und etlichen Webdiensten arbeite wollte ich unbedingt eine autarke Lösung - weiteres dazu ganz unten.

  • 1. Wir besorgen uns eine .csv-Datei mit gaaaaaaanz vielen IP-Rangeeinträgen - ich habe mir die von maxmind.com besorgt.
  • 2. Eine Tabelle erzeugen - wir brauchen 6 Felder - siehe Hinweise von maxmind.com
  • 3. Die .csv-Datei in diese Tabelle importieren, geht ganz bequem mit phpMyAdmin
    Vorsicht: wenn die PHP-INI-Einstellung upload_max_filesize nur auf 2M steht wird das nix. 8M sollten es schon sein.
  • 4. Nun machen wir uns ganz kurz mit der ip2long-Funktion von PHP vertraut - die brauchen wir nämlich um die IP umzurechnen.
  • 5. Fertig - mit einem einzigen Query können wir nun abfragen ob wir dem jeweiligen Range ein Land zuordnen können.


$client_ip        = $_SERVER['REMOTE_ADDR'];
$client_ip_long   = ip2long($client_ip);

$sql              = "SELECT code,country FROM geoip WHERE $client_ip_long >= start_num and $client_ip_long <= end_num ";
$geoIPArray       = $DB->getAssocResult($sql);    // Beispiel meiner DB-Klasse

Vor- und Nachteile, Anmerkungen...

Die hier gezeigte Methode ist sicherlich quick&dirty aber ich habe somit etwas umgesetzt wo andere Webbuden (Ja, ich hab's selbst schon mal gelesen!) mit 8 Arbeitsstunden rangehen wollten.Krass,oder?
Vorteile:

  • schnell implementiert
  • theoretisch erweiterbar auf Länderregionen und Städte - die benötigten Dateien sind ebenfalls im Netz zu finden.

Nachteile:

  • muß manuell gepflegt werden (also an jedem ersten eines Monats neues .csv-Datei importieren - oder auch nicht winking smiley )
  • (wie wohl jeder GeoIP-Dienst auch!) nur zu 99,5% sicher - wer weiß wie Proxys funktionieren oder das IP-Problem von AOL-Usern kennt wird wissen was ich meine
Frische Änderungen | Menü editieren
zuletzt geändert am 23.07.2009 08:25 Uhr von Andi
Edit Page | Page History