2012-04-04 11 views
1

Gibt es eine Möglichkeit, eine PHP If-Anweisung basierend auf dem Standort der Personen zu erstellen?PHP IF Statement basierend auf Geo Location?

Mein Problem kommt auf Amazon Affiliate-Links. Der Link zum Kauf einer DVD auf Amazon.de ist anders als der, den man bei Amazon.com kauft, und ich möchte einen Weg, nur den richtigen zu zeigen.

Zur gleichen Zeit, wenn sie nicht in jedem Land basieren, dann möchte ich nicht, dass der Link an erster Stelle angezeigt wird.

Beispiel:

If Location = UK; print "amazon-UK-link" 
If Location = US; print "amazon-US-link" 
If location = None of the above; print nothing 
+1

einfach, fragen Sie den Benutzer. Der einzige zuverlässige Weg. –

+0

Dagon hat Recht. Sie können IP-Standortdienste verwenden alles, was Sie wollen, aber keine sind 100% korrekt, und einige Arten von Proxies sind nicht nachweisbar (und damit die falsche IP geprüft werden). Das bedeutet nicht, dass Standortdienste keinen Versuch wert sind, nehme ich an. – Corbin

Antwort

1

können Sie verwenden: string geoip_country_code_by_name (string $hostname)

Beispiel:

<?php 
$country = geoip_country_code_by_name('www.example.com'); 
if ($country) { 
    echo 'This host is located in: ' . $country; 
} 
?> 

Ausgang:

Dieser Rechner befindet sich in: US

Für Ihren Fall können Sie: geoip_country_code_by_name($_SERVER['REMOTE_ADDR']);, um den Ländercode für den aktuellen Benutzer zu erhalten.

+0

BTW, das wird nicht funktionieren, wenn Sie nicht Setup geoip haben. Bitte beachten Sie Anweisungen zur Einrichtung geoip: http://www.php.net/manual/en/geoip.setup.php –

1

Sie müssen die IP-Adresse des Besuchers verwenden, um ihren physischen Standort nachzuschlagen. Neben der Verwendung der GeoIP-Erweiterung für PHP (wie stewe darauf hingewiesen), gibt es zwei Möglichkeiten, dies zu tun:

Der einfache Weg

Verwenden Sie einen externen Dienst wie http://www.hostip.info

Mit dem eigenen MySQL-Daten

1.) Rufen Sie die IP-Adresse der Besucher:

if (getenv('HTTP_X_FORWARDED_FOR')) 
{ 
    $ip_address = getenv('HTTP_X_FORWARDED_FOR'); 
} 
else 
{ 
    $ip_address = getenv('REMOTE_ADDR'); 
} 
Konvertieren 10

2.) die IP-Adresse des Besuchers auf eine IP-Nummer:

$ips = explode(".",$ip_address); 
return ($ips[3] + $ips[2] * 256 + $ips[1] * 256 * 256 + $ips[0] * 256 * 256 * 256); 

3.) Suchen Sie die IP-Nummer aus Ihrer Datenbank, die Sie können download here. Zum Beispiel: Die IP-Adresse 202.186.13.4 wird in IP-Nummer 3401190660 konvertiert.Es ist zwischen dem Anfang und dem Ende der folgenden IP-Nummern:

Beginning_IP | End_IP  | Country | ISO 
-------------+-------------+----------+---- 
3401056256 | 3401400319 | MALAYSIA | MY 
+1

Ich glaube, dass getenv (HTTP_X_FORWARDED_FOR) sollte für REMOTE_ADDR getenv (‚HTTP_X_FORWARDED_FOR‘) und das gleiche sein. Außerdem verwenden Leute normalerweise $ _SERVER oder $ _ENV, obwohl ich denke, dass mit getenv() nichts falsch ist. – Corbin

+0

Auch wow, hostip.info denkt, dass meine IP in Kalifornien ist. Ich bin eigentlich in Arkansas. Habe nur ein paar andere Dienste überprüft, und alle haben es richtig gemacht. (MaxMind wird es ca. 3 Meilen bis>. <) – Corbin

+0

@Corbin offenbar ich in Nordengland leben am Ufer eines Flusses. Ich bin eigentlich in South West England mitten im Grünen. So nah – hohner

0

Sie eine einfache API von http://www.geoplugin.net/

$xml = simplexml_load_file("http://www.geoplugin.net/xml.gp?ip=".getRealIpAddr()); 
echo $xml->geoplugin_countryName ; 


echo "<pre>" ; 

foreach ($xml as $key => $value) 
{ 
    echo $key , "= " , $value , " \n" ; 
} 

function getRealIpAddr() 
{ 
    if (!empty($_SERVER['HTTP_CLIENT_IP'])) //check ip from share internet 
    { 
     $ip=$_SERVER['HTTP_CLIENT_IP']; 
    } 
    elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])) //to check ip is pass from proxy 
    { 
     $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
    } 
    else 
    { 
     $ip=$_SERVER['REMOTE_ADDR']; 
    } 
    return $ip; 
} 

Ausgabe

United States 
geoplugin_city= San Antonio 
geoplugin_region= TX 
geoplugin_areaCode= 210 
geoplugin_dmaCode= 641 
geoplugin_countryCode= US 
geoplugin_countryName= United States 
geoplugin_continentCode= NA 
geoplugin_latitude= 29.488899230957 
geoplugin_longitude= -98.398696899414 
geoplugin_regionCode= TX 
geoplugin_regionName= Texas 
geoplugin_currencyCode= USD 
geoplugin_currencySymbol= $ 
geoplugin_currencyConverter= 1 

Es macht Sie haben so viele nutzen können Optionen können Sie mit

Dank rumspielen

:)

Verwandte Themen