Meine IP-Adresse lokalisieren und orten (Geolocation)
Gib eine IP-Adresse ein, um die Geolocation der IP heraus zu finden. Standardmäßig wird deine IP zum orten und lokalisieren verwendet.
Wie ist meine IP-Adresse?
In einen meiner letzteren Projekte habe ich die IP-Adresse und die Browserdaten, beim Login des Users, in der Datenbank gespeichert. Der Gedanke dahinter war der, dass ich dem Benutzer, auf dem von ihm hinterlegte E-Mail Adresse eine automatisierte E-Mail zukommen lassen wollte mit dem Hinweis, dass es einen Login mit der IP, dem Browser und vermutlich aus der Region kam.
Wie komme ich an die Geolocation Daten einer IP-Adresse?
Diese Frage musste ich mir stellen, denn mit $_SERVER
bekomme ich nur die IP-Adresse und den Browser. Also woher die Geolocation Daten anhand der IP-Adresse herbekommen?
Nach einigem Suchen bin ich schlussendlich auf eine wirklich schöne kostenlose API gestoßen. Mit der konnte ich spielend leicht alle notwendigen GEO Daten anhand der IP anzeigen lassen und noch viele mehr (Siehe Demo-Box ganz oben).
So bekommst du mit PHP und Ajax Geolocation Daten anhand der IP-Adresse
Eigentlich ist die API super simpel. es reicht schon folgenden Link aufzurufen:
http://ip-api.com/json/8.8.8.8
Nun solltet Ihr in etwas folgendes sehen:
{"status":"success","country":"United States","countryCode":"US","region":"VA","regionName":"Virginia","city":"Ashburn","zip":"20149","lat":39.03,"lon":-77.5,"timezone":"America/New_York","isp":"Google LLC","org":"Google Public DNS","as":"AS15169 Google LLC","query":"8.8.8.8"}
Wenn ja, dann funktioniert die API super. Nun können wir anfangen.
1. IP Adresse des Besuchers
Zunächst einmal holen wir uns die IP des Users:
if (!empty($_SERVER['HTTP_CLIENT_IP'])) {
$ip = $_SERVER['HTTP_CLIENT_IP'];
} elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) {
$ip = $_SERVER['HTTP_X_FORWARDED_FOR'];
} else {
$ip = $_SERVER['REMOTE_ADDR'];
}
2. Browser und Betriebssystem des Besuchers
Und mit $_SERVER['HTTP_USER_AGENT'];
bekommen wir den verwendeten Browser und das Betriebssystem. Wer den Browser und das Betriebssystem schöner angezeigt haben möchte, der sollte sich unbedingt diesen Code-Schnippsel anschauen.
3. Ausgabe definieren
Nun erstellen wir ein DIV in dem alle Daten geladen werden sollen
4. Mit Ajax die Daten abholen
Nun erstellen wir eine function und übergeben dieser die IP Adresse.
Beachte: Du musst den Pfad (url) zu deiner ajax.php anpassen
function ipAdress( ip ) {
if ( ip != undefined && ip.length ) {
var request = $.ajax({
url : "ajax.php",
method : "POST",
data : {
ip : ip,
},
success : function(result) {
jQuery('div#output').html( result );
},
error : function (xhr, ajaxOptions, thrownError) {
jQuery('div#output').html('Ups, da ist wohl etwas schief gegangen.
' + xhr.status + '
' + thrownError + '
');
}
});
} else {
jQuery('div#output').html('Bitte gib eine IP-Adresse ein!');
}
} ipAdress( '' );
5. Json Daten abrufen
In der ajax.php holen wir uns nun die JSON Daten. Man kann zusätzlich die Sprache definieren und die einzelnen Felder, die man haben möchte. In meinem Beispiel habe ich alle angegegen. In der Ausgabe habe ich nur einen Wert ausgewählt. Das müsst Ihr nach euren Bedürfnissen anpassen.
// filter_var_array - https://www.php.net/manual/de/function.filter-var-array.php
$postData = filter_var_array( $_POST, FILTER_SANITIZE_STRING );
// Json Data
$lang = 'da' //en, de, es, pt-BR, fr, ja, zh-CN, ru
$url = 'http://ip-api.com/json/' . $postData['ip'] . '?fields=status,message,continent,continentCode,country,countryCode,region,regionName,city,zip,lat,lon,timezone,isp,org,as,asname,reverse,mobile,proxy,hosting,query&lang=' . $lang;
$json_content = file_get_contents($url, TRUE);
$json = json_decode($json_content, TRUE);
// Status success
if ( isset( $json['status'] ) && $json['status'] == 'success' ) {
// Geo
$continent = isset( $json['continent'] ) && strlen( $json['continent'] ) ? $json['continent'] : '-';
$continentCode = isset( $json['continentCode'] ) && strlen( $json['continentCode'] ) ? $json['continentCode'] : '-';
$country = isset( $json['country'] ) && strlen( $json['country'] ) ? $json['country'] : '-';
$countryCode = isset( $json['countryCode'] ) && strlen( $json['countryCode'] ) ? $json['countryCode'] : '-';
$region = isset( $json['region'] ) && strlen( $json['region'] ) ? $json['region'] : '-';
$regionName = isset( $json['regionName'] ) && strlen( $json['regionName'] ) ? $json['regionName'] : '-';
$city = isset( $json['city'] ) && strlen( $json['city'] ) ? $json['city'] : '-';
$zip = isset( $json['zip'] ) && strlen( $json['zip'] ) ? $json['zip'] : '-';
$lat = isset( $json['lat'] ) && strlen( $json['lat'] ) ? $json['lat'] : '-';
$lon = isset( $json['lon'] ) && strlen( $json['lon'] ) ? $json['lon'] : '-';
$isp = isset( $json['isp'] ) && strlen( $json['isp'] ) ? $json['isp'] : '-';
$org = isset( $json['org'] ) && strlen( $json['org'] ) ? $json['org'] : '-';
$as = isset( $json['as'] ) && strlen( $json['as'] ) ? $json['as'] : '-';
$asname = isset( $json['asname'] ) && strlen( $json['asname'] ) ? $json['asname'] : '-';
$reverse = isset( $json['reverse'] ) && strlen( $json['reverse'] ) ? $json['reverse'] : '-';
$mobile = isset( $json['mobile'] ) && $json['mobile'] == true ? 'true' : 'false';
$proxy = isset( $json['proxy'] ) && $json['proxy'] == true ? 'true' :'false';
$hosting = isset( $json['hosting'] ) && strlen( $json['hosting'] ) ? 'true' : 'false';
echo $regionName;
}
Wenn Ihr alles richtig gemacht habt, dann solltet Ihr die IP Adresse lokalisieren und geographisch zuordnen können. Solltet Ihr Anregungen, Verbesserungen oder Fehler entdeckt haben, dann schreibt es mir gerne in die Kommentare.
Danke, sehr gute interssante Seite
Martin