2016-06-09 8 views
0

EDIT: War nicht ein Duplikat mit zu beginnen. Ursprünglich war es so zu verbessern oder anderen Code zu verwenden, um basierend auf dem COUNTRY des Besuchers umzuleiten. HierPHP GEO Location Redirect - Gibt es bessere Lösungen?

ist der Code, den ich zur Zeit bin mit:

require_once('geo/geoip.inc'); 
$gi = geoip_open('geo/GeoIP.dat', GEOIP_MEMORY_CACHE); 
$country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']); 
geoip_close($gi); 

if ($country == 'FR') { 
header('Location: http://fr.mysite.com'); 
} 

if ($country == 'US') { 
header('Location: http://us.mysite.com'); 
} 

auf ein paar statisch (HTML + JavaScript) virale Websites, die täglich in rund 100.000 Besuchern bringen, manchmal mehr und manchmal weniger.

Gibt es bessere (und kostenlose) Lösungen zum Weiterleiten basierend auf Land? Ich bin kürzlich von einem dedizierten Server zu einem VPS gewechselt und der aktuelle Code scheint eine Menge CPU-Auslastung zu verbrauchen (so wird es mir von meinem Host gesagt). Ich werde wahrscheinlich zurück zum dedizierten Server gehen, aber ich würde immer noch gerne wissen, ob es einen besseren Weg gibt, einen, der den Server nicht so sehr belastet.

Auch, weil ich Umlenken auf Sprache basiert bin:

// french 
if ($country == 'FR') { 
header('Location: http://fr.mysite.com'); 
} 

//french 
if ($country == 'BE') { 
header('Location: http://fr.mysite.com'); 
} 

//french 
if ($country == 'CA') { 
header('Location: http://fr.mysite.com'); 
} 

//english 
if ($country == 'US') { 
header('Location: http://us.mysite.com'); 
} 

//english 
if ($country == 'UK') { 
header('Location: http://us.mysite.com'); 
} 

und extrem müde jetzt, was ist der bessere Weg? dies oder nicht:

//english 
    if ($country == 'US') || ($country == 'CA') { 
    header('Location: http://us.mysite.com'); 
    } 

So jemand aus den USA oder Kanada besuchen würde zu google.com

Vielen Dank im Voraus

+0

einfach an google.com senden, es wird auf die Länderseiten für Sie umleiten. oder verwenden Sie die Browsersprache. –

+0

Meine Schuld, ich habe nur Google als Beispiel verwendet. Ich würde Besucher basierend auf dem Land auf andere Seiten oder Subdomains meiner Website senden. Was wäre der beste Weg, um eine Browsersprache zu erhalten und auf die entsprechende Seite umzuleiten? Natürlich werde ich es später googlen aber wenn Sie irgendwelche Vorschläge haben, lassen Sie es mich wissen. Vielen Dank! – xetsr

+0

downvote für Code, den Sie nicht wirklich verwenden –

Antwort

0

EDIT umgeleitet werden: Source ein answer to the duplicate question endete als.

Wenn die einzigen Unterschiede zwischen den Websites Sprachen sind und nichts mit ihrem tatsächlichen Land zu tun hat, sollten Sie stattdessen auf bevorzugte Sprache umleiten.

Dies wird jedoch sehr komplex, da HTML-Header mehrere Sprachen enthalten können, wobei bestimmte Sprachen gegenüber anderen bevorzugt werden. Eine Lösung, die ich vor einiger Zeit gefunden habe und die ursprüngliche Quelle leider nicht finden kann, besteht darin, eine Liste verfügbarer Sprachen zu erstellen, die Sprachen aus dem HTML-Header in der Reihenfolge ihrer Präferenz zu analysieren und auf der folgenden Umleitung zu basieren:

Ich habe die Funktion prefered_language() NICHT BENUTZT UND KEINE TEILE IN IHRER ERSTELLUNG EINGESETZT! Aber ich das Original nicht überall finden kann .. Wenn jemand anderes ist in der Lage, bitte, es Link ...

$available_languages = array("en", "fr"); 

$default_language = "en"; 

function prefered_language($available_languages, $http_accept_language) { 
    global $default_language; 
    $available_languages = array_flip($available_languages); 
    $langs = array(); 
    preg_match_all('~([\w-]+)(?:[^,\d]+([\d.]+))?~', strtolower($http_accept_language), $matches, PREG_SET_ORDER); 
    foreach($matches as $match) { 
     list($a, $b) = explode('-', $match[1]) + array('', ''); 
     $value = isset($match[2]) ? (float) $match[2] : 1.0; 
     if(isset($available_languages[$match[1]])) { 
      $langs[$match[1]] = $value; 
      continue; 
     } 
     if(isset($available_languages[$a])) { 
      $langs[$a] = $value - 0.1; 
     } 
    } 
    if($langs) { 
     arsort($langs); 
     return key($langs); 
    } else { 
     return $default_language; 
    } 
} 

if(isset($_COOKIE["client_lang"])){ 
    $lang = $_COOKIE["client_lang"]; 
}else{ 
    $lang = prefered_language($available_languages, strtolower($_SERVER["HTTP_ACCEPT_LANGUAGE"])); 
    setcookie("client_lang", $lang, time() + (86400 * 30 *), "/"); 
} 

header('Location: http://' . $lang . '.mysite.com'); 

ich auch ein Plätzchen zu schaffen für die Kunden bevorzugte Sprache würde vorschlagen, wie ich oben ausgeführt, da diese Funktion immer noch eine gewisse CPU-Auslastung erfordert.

+0

Vielen Dank! Genau das habe ich gebraucht. – xetsr

+0

Natürlich! Denken Sie daran, Fragen als Angenommen zu markieren, wenn sie Ihre Frage vollständig beantworten. (Das gilt für alle Fragen, nicht nur für mich: P) –