Frage

brauche ich verschiedene Links für US- und Nicht-US-Besucher auf meiner Seite zu zeigen. Diese Einfachheit halber ist nur, so dass ich nicht für einen super-hohe Grad an Genauigkeit suchen und Sicherheit oder Spoofing ist kein Problem.

Ich weiß, es gibt geografische Ausrichtung Dienste und Listen, aber dies scheint übertrieben, da ich nur (ungefähr) müssen, um festzustellen, ob die Person in den USA ist oder nicht.

Ich dachte über JavaScript mit dem Benutzerzeitzone zu erhalten, aber dies scheint nur den Versatz zu geben, so dass die Nutzer in Kanada, Mexiko und Südamerika den gleichen Wert wie die Menschen in den USA hat.

Gibt es andere Informationen entweder in JavaScript oder PHP, kurz von der IP-Adresse greifen und einen Lookup zu tun, dies zu bestimmen?

War es hilfreich?

Lösung

Es gibt einige kostenlose Dienste gibt, die Sie Land und IP-basierte Geolokalisierungssysteme von der Client-Seite machen lassen.

Ich habe die WIPmania kostenlos JSONP Service, es ist wirklich einfach verwendet zu verwenden:

<script type="text/javascript">
  // plain JavaScript example
  function jsonpCallback(data) { 
    alert('Latitude: ' + data.latitude + 
          '\nLongitude: ' + data.longitude + 
          '\nCountry: ' + data.address.country); 
  }
</script>
<script src="http://api.wipmania.com/jsonp?callback=jsonpCallback"
        type="text/javascript"></script>

Oder wenn Sie einen Rahmen, der JSONP unterstützt, wie jQuery können Sie:

// jQuery example
$.getJSON('http://api.wipmania.com/jsonp?callback=?', function (data) { 
  alert('Latitude: ' + data.latitude + 
        '\nLongitude: ' + data.longitude + 
        '\nCountry: ' + data.address.country); 
});

Überprüfen Sie das obige Snippet läuft hier .

Andere Tipps

Der beste Indikator ist wahrscheinlich die HTTP-Accept-Language-Header. Es wird so aussehen wie unten in der HTTP-Anforderung:

GET / HTTP/1.1
Accept: */*
Accept-Language: en-us
User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; Trident/4.0; SLCC1; .NET CLR 2.0.50727; Media Center PC 5.0; .NET CLR 3.5.21022; .NET CLR 3.5.30729; MDDC; OfficeLiveConnector.1.4; OfficeLivePatch.0.0; .NET CLR 3.0.30729)
Accept-Encoding: gzip, deflate
Host: www.google.com
Connection: Keep-Alive

Sie sollten Lage sein, dies in PHP abrufen folgendes mit:

<?php
echo $_SERVER['HTTP_ACCEPT_LANGUAGE'];
?>

Ich würde sagen, dass geotargetting die einzige Methode ist, die auch nur entfernt zuverlässig ist. Aber es gibt auch Fälle, in denen es überhaupt nicht helfen. Ich halte zu Websites erhalten, die ich glaube, in Frankreich bin, weil meine Firma Rückgrat gibt und alle Internet-Verkehr geht durch.

Die HTTP-Accept-Header nicht genug sind, um das Benutzergebietsschema zu bestimmen. Es sagt Ihnen, nur das, was der Benutzer als Sprache gewählt, die nichts mit dem zu tun haben, wo sie sind. Mehr dazu hier .

Je nachdem, welche Länder Sie unterscheiden wollten, Zeitzonen können eine sehr einfache Möglichkeit, es zu erreichen - und ich nehme an, es sehr zuverlässig ist, als die meisten Menschen, die Uhren haben auf ihren Computer richtig eingestellt. (Obwohl natürlich gibt es viele Länder, die Sie können mit dieser Technik nicht unterscheiden).

Hier ist ein wirklich einfaches Beispiel, wie es zu tun:

http://unmissabletokyo.com/country-detector

Wipmania.com & PHP

<?php
$site_name = "www.your-site-name.com";

function getUserCountry() {
    $fp = fsockopen("api.wipmania.com", 80, $errno, $errstr, 5);
    if (!$fp) {
        // API is currently down, return as "Unknown" :(
        return "XX";
    } else {
        $out = "GET /".$_SERVER['REMOTE_ADDR']."?".$site_name." HTTP/1.1\r\n";
        $out .= "Host: api.wipmania.com\r\n";
        $out .= "Typ: php\r\n";
        $out .= "Ver: 1.0\r\n";
        $out .= "Connection: Close\r\n\r\n";
        fwrite($fp, $out);
        while (!feof($fp)) {
            $country = fgets($fp, 3);
        }
        fclose($fp);
        return $country;
    }
}
?>

@rostislav

oder mit Curl:

public function __construct($site_name) {
    // create a new cURL resource
    $ch = curl_init();

    // set URL and other appropriate options
    curl_setopt($ch, CURLOPT_POST, 0);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, Array("Content-Type: text/xml"));
    curl_setopt($ch, CURLOPT_URL, "http://api.wipmania.com".$_SERVER['REMOTE_ADDR']."?".$site_name);
    curl_setopt($ch, CURLOPT_HEADER, 0);

    // grab URL and pass it to the browser
    $response = curl_exec($ch);
    $info = curl_getinfo($ch,CURLINFO_HTTP_CODE);

    if (($response === false) || ($info !== 200)) {
        throw new Exception('HTTP Error calling Wipmania API - HTTP Status: ' . $info . ' - cURL Erorr: ' . curl_error($ch));
    } elseif (curl_errno($ch) > 0) {
        throw new Exception('HTTP Error calling Wipmania API - cURL Error: ' . curl_error($ch));
    }

    $this->country = $response;

    // close cURL resource, and free up system resources
    curl_close($ch);
}

Meine Lösung, einfach und klein, in diesem Beispiel i Test Kanada Region von Sprache fr-CA or en-CA

if( preg_match( "/^[a-z]{2}\-(ca)/i", $_SERVER[ "HTTP_ACCEPT_LANGUAGE" ] ) ){

   $region = "Canada";

}

Einfach können wir hostip API

<?php $country_code = file_get_contents("http://api.hostip.info/country.php"); <br/>if($country_code == "US"){ echo "You Are USA"; } <br/>else{ echo "You Are Not USA";} ?>

Alle Ländercodes sind hier .. http://en.wikipedia.org/wiki/ISO_3166-1_alpha-2

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top