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.
<?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 Host
222-33.78-83.cust.bluewin.chergibt als Land
ch
Um zu einer TLD den dazugehörigen ausgeschriebenen Namen des Landes zu erhalten, siehe dieses PHP-Array.

Siehe auch:
 


Andere Einträge


Kommentare

Es sind noch keine Kommentare vorhanden.

Kommentar hinzufügen



(wird nicht veröffentlicht)
(optional)