Open top menu

Mittels GeoIP die Herkunftsstadt einer IP-Nummer ermitteln

Google Maps-Anwendungen kursieren inzwischen recht viele dort draußen, aber leider kommen die wenigstens auf die Idee, dass man eigentlich dem Nutzer ein sehr nettes Feature anbieten könnte: Man ermittelt seine IP-Nummer, mit der GeoIP-Datenbank stellt man fest, in welchem Ort der Provider des Benutzers beheimatet ist, und dann zentriert man die Map auf diesen Ort. Natürlich hat man an dieser Stelle mit allerhand Unschärfe zu kämpfen, denn zum einen kann die GeoIP an sich fehlschlagen, zum anderen kann es auch bei der Geocodierung zu Problemen kommen. Nichtsdestotrotz ist es ein nettes Feature, das man bei manchen Projekten durchaus einsetzen sollte.

Wie Adressen geocodiert werden, habe ich ja schon beschrieben, insofern müssen wir uns nur noch mit der GeoIP an sich beschäftigen. Die Datenbank GeoLite City von Maxmind ist hierbei frei und ist schon sehr genau (99.5%). Wer es genauer wissen will, kann sich auf der Homepage von Maxmind natürlich auch für die kommerzielle Version entscheiden. Der Zugriff auf beide ist programmier-technisch identisch. Für die kommerzielle Version können darüber hinaus monatliche Updates erworben werden.

Allerdings hat das Ganze auch einen Haken: Sinnvollerweise entscheidet man sich bei der Datenbank für eine Binärversion, die 30MB groß ist. Funktionscaching ist also sinnvollerweise angesagt! Wer möchte, kann sich natürlich auch für die .csv-Version entscheiden, die dann in eine Datenbank eingelesen werden könnte. Maxmind stellt eine prima Installationsanleitung für die Datenbank bereit. Wobei sich die Installation eigentlich auf das Auspacken des Archives beschränkt.

Zumindest für PHP gibt es eine eigene API, die den direkten Zugriff auf die Binärdatei erlaubt. Downloaden kann man die PHP-Dateien hier. Wenn man in Performance-Probleme läuft, kann man die API auch direkt in PHP als Modul einkompilieren. Für unser Tutorial verwenden wir natürlich die „einfache“ Methode, da die wenigsten Provider es zulassen werden, PHP anzupassen.

Hat man das Tool heruntergeladen, ist der Einsatz wirklich einfach:

include("geoipcity.inc");
include("geoipregionvars.php");
$clientip = $_SERVER['REMOTE_ADDR'];
$gi = geoip_open("/usr/local/share/GeoIP/GeoIPCity.dat",GEOIP_STANDARD);
$record = geoip_record_by_addr( $gi, $clientip );
echo $record->city;
geoip_close($gi);
Guido
Geschrieben von Guido

Guido Mühlwitz ist Freiberufler mit Schwerpunkt HTML5, Zend Framework 2 / Node.js und individueller WordPress Plugin Entwicklung. Wenn er sich nicht gerade bei Twitter über PHP aufregt, bloggt er über aktuelle Themen aus dem Bereich der Anwendungsentwicklung.

7 Antworten auf Kommentar

  1. Avatar
    April 09, 2013

    Toll wenn nichts in der htaccess eingetragen werden muss :) aber du schriebst von „Funktionscaching ist also sinnvollerweise angesagt!“. Das sagt mir halt erst mal nichts aber ich verstehe das irgendwas gemacht werden muss denn ständig 30 MB zu laden ist ohne „caching“ nicht sinnvoll. Google hat mich halt mit „Funktionscaching“ zu ner Seite gelockt, wo etwas von htaccess stand. Deshalb fragte ich.
    Ich denk mal die „csv“ + SQL wäre das beste, als 30 MB mit PHP direkt zu laden. Oder?

    Antwort

  2. Avatar
    April 09, 2013

    Gar nichts ;) Die .htaccess ist vollkommen irrelevant für so etwas ;)

    Antwort

  3. Avatar
    April 08, 2013

    Hab mal etwas geschaut… wegen „Funktionscaching“. Da muss man in der htaccess was hinzufügen. Weis jemand was da rein muss? Würd mich freuen. Das mit dem „City“ würde mich schon interessieren.

    Antwort

  4. Avatar
    Februar 29, 2012

    Da bin ich mir überhaupt nicht sicher, sehe aber im Moment auch kein Problem – solange man keinen Cloud-Service verwendet. Bei dieser Lösung verlässt die IP-Nummer ja den Server nicht, theoretisch dürfte ich die also sehr wohl geocodieren da kein Dritter an die Daten kommt. Dies ist allerdings nur mein gefährliches Halbwissen ;)

    Antwort

  5. Avatar
    Februar 29, 2012

    Mich würde einmal interessieren, wie man das rechtssicher einbaut. Muss aus Datenschutzsicht der jeweilige User nicht eigentlich zustimmen, dass sein IP-Adresse für Geocoding benutzt wird?

    Antwort

  6. Avatar
    Januar 08, 2011

    Ja und wo ist jetzt das Tutorial? Das was hier steht ist nur eine Zusammenfassung einer Beschreibung wie auf tausend anderen Seiten auch!

    Antwort

Leave a comment