Herkunftsland des Besuchers ermitteln
Oktober 2009
Mit dem hier beschriebenen Script, kann man ohne zusätzliche PHP-Extensions oder Datenbanken das Herkunftsland mehr oder weniger genau bestimmen.
Man ermittelt als erstens mit der Funktion gethostbyaddr() den Host der IP-Adresse der Besuchers.
Allerdings kommt es häufig vor, dass der Host auf .com oder .net endet, die man also nicht auf ein Land zuordnen kann. Daher sollte man die grössten Brocken "von Hand" korrigieren.
Das Array $hostTrans lässt sich entsprechend erweitern.
Als ganzes ergibt sich dann folgendes Script:
Ein reales Beispiel kann man sich so vorstellen:
Um zu einer TLD den dazugehörigen ausgeschriebenen Namen des Landes zu erhalten, siehe dieses PHP-Array.
Siehe auch:
Man ermittelt als erstens mit der Funktion gethostbyaddr() den Host der IP-Adresse der Besuchers.
<?php
$ip = $_SERVER['REMOTE_ADDR'];
$host = gethostbyaddr($ip);
?>Der Host, welchen wir bekommen haben, enthält eine Top-Level-Domain (z.B. de oder ch). Diese extrahieren wir nun:<?php
$country = (strpos($host, '.')===false) ?
$host :
substr(strrchr($host, '.'), 1);
?>Und schon ist das Länderkürzel in der Variable $country gespeichert.Allerdings kommt es häufig vor, dass der Host auf .com oder .net endet, die man also nicht auf ein Land zuordnen kann. Daher sollte man die grössten Brocken "von Hand" korrigieren.
<?php
$hostTrans = array(
'.arcor-ip.net'=>'.de', '.t-dialin.net'=>'.de',
'.sui-inter.net'=>'.ch', '.drei.com'=>'.at',
'.proxad.net'=>'.fr', '.gaoland.net'=>'.fr',
'.mchsi.com'=>'.us', '.comcast.net'=>'.us',
);
$host = strtr($host, $hostTrans);
?>Wenn nun beispielsweise jemand von t-dialin.net kommt, wird er als Deutscher identifiziert.Das Array $hostTrans lässt sich entsprechend erweitern.
Als ganzes ergibt sich dann folgendes Script:
<?php
$ip = $_SERVER['REMOTE_ADDR'];
// Host ermitteln
$host = gethostbyaddr($ip);
// Host-Korrekturen
$host = strtolower($host);
$hostTrans = array(
'.arcor-ip.net'=>'.de', '.t-dialin.net'=>'.de',
'.sui-inter.net'=>'.ch', '.drei.com'=>'.at',
'.proxad.net'=>'.fr', '.gaoland.net'=>'.fr',
'.mchsi.com'=>'.us', '.comcast.net'=>'.us',
);
$host = strtr($host, $hostTrans);
// Herkunftsland (TLD) ausschneiden
$country = (strpos($host, '.')===false) ?
$host :
substr(strrchr($host, '.'), 1);
// Fehler bei gethostbyaddr()
if($ip === $host)
$country = '?';
# Mögliche Inhalte von $country:
# de, uk, com, ?, localhost
?>Ein reales Beispiel kann man sich so vorstellen:
IP: 83.78.33.222führt zum Host222-33.78-83.cust.bluewin.chergibt als LandchUm zu einer TLD den dazugehörigen ausgeschriebenen Namen des Landes zu erhalten, siehe dieses PHP-Array.
Siehe auch:
Andere Einträge
- Zahl zu Wort
- strtocamelcase() - CamelCase
- Undercover-MSN-Bot aufdecken
- Geschwindigkeit von PHP-Scripts optimieren
- Dateien mit .htaccess gzip komprimieren
Kommentare
Es sind noch keine Kommentare vorhanden.