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);

7 Antworten auf „Mittels GeoIP die Herkunftsstadt einer IP-Nummer ermitteln“

  1. 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?

  2. 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.

  3. 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 ;)

  4. 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?

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

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.