Ländercode anhand der IP-Adresse ermitteln

Hast du dich schonmal gefragt wie es funktioniert das man bei gewissen Webseiten (zb. Dell.com) automatisch auf die landesspezifische Seite weitergeleitet wird?

Oder warst du mal per Zufall auf einer Schmuddelseite und hast dort Werbung gesehen mit einem Text wie “Mädchen aus <Dein Wohnort> warten nur auf dich”?

Ja? Dann wird dich das hier evtl. interessieren.

Grundsätzliches

Nun.. das ganze nennt sich übrigens Geotargeting und Wikipedia beschreibt den Begriff mit folgenden Worten:

Geotargeting (Synonyme: Geolocation/Geolokation) ordnet IP-Adressen, MAC-Adressen oder IPTC/XMP ihrer geographischen Herkunft zu

Dieses Geotargeting wird heute dazu verwendet um Besucher auf landesspezifische Seiten weiterzuleiten oder zb. Werbebanner anzuzeigen welche zb. einen Event oder ein Produkt aus der Umgebung des Besuchers zu bewerben.

Wer mehr darüber erfahren möchte kann sich diesen Artikel zu Gemüte führen.

Der Code

In meinem Beispiel zeige ich euch wie man aus der IP-Adresse den Ländercode ermitteln kann. Ok.. der Ländercode mag ja nicht so spannend sein wie der Wohnort jedoch ist kann der Ländercode auch sehr nützlich sein wenn es zb. um Registrierungen geht.

Eine Registrierung sollte immer so kurz wie möglich gehalten werden. Früher war es normal das man bis zu 20 verschiedene angaben machen musste bei einer Registrierung heute benötigt man oft nur noch eine Emailadresse und ein Passwort was aber nicht bedeutet das nicht noch weitere Daten gespeichert werden ;)

Mit diesem Code-Schnippsel kann man aus der IP-Adresse des Besuchers den Ländercode herausfinden und zb. bei einer Registrierung speichern oder den Besucher einfach auf eine andere Seite umleiten.

Hier der PHP-Code:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
function getCountryFromIp($ip) {
	$ch = curl_init();
	curl_setopt($ch, CURLOPT_URL, "http://api.hostip.info/country.php?&position=true&ip=".$ip);
	curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
	curl_setopt($ch, CURLOPT_HEADER, 0);
	curl_setopt($ch, CURLOPT_TIMEOUT, 10);
 
	$country = curl_exec($ch);
	curl_close($ch);
 
	return $country;	
}
 
$countrycode = getCountryFromIp($_SERVER['REMOTE_ADDR']);

Der Code Kurz erklärt:

  1. cURL Session starten
  2. cURL Optionen festlegen
  3. cURL Abfrage ausführen
  4. Resultat der cURL Abfrage zurückgeben

Das ganze ist natürlich noch ausbaubar ;)

Ach ja.. die Servervariable $_SERVER['REMOTE_ADDR'] beinhaltet nicht immer die “echte” IP-Adresse. Falls der Besucher via Proxy-Server unterwegs ist wird dir nur die IP des Proxys zurückgegeben.

Um die “echte” IP-Adresse eines Besuchers zu erfahren kannst du folgende Funktion verwenden.

1
2
3
4
5
6
7
8
9
10
11
12
function getRealIpAddr() {
    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'];
    }
    return $ip;
}

Quelle: Getting real IP address in PHP

In meinem Beispiel verwende ich die API von hostip.info. hostip.info ist ein Anbieter von Geodaten welche freundlicherweise auch eine API zur Verfügung stellt.

Weitere Infos zur API von hostip.info gibts hier.

Übrigens.. wer nicht immer eine API Abfrage absetzen möchte kann sich bei hostip.info auch ganze IP-Tabellen runterladen und sie lokal in einer MySQL Datenbank speichern was die ganze Abfrage um einiges schneller macht.

Kommentar schreiben

You can use these tags: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="" highlight="">