使用Php显示基于用户国家/地区的内容

时间:2011-03-01 09:07:11

标签: php

有没有办法可以根据用户所在国家/地区显示不同的内容 我的页面是 Google.com 此页面适用于美国人,如果加拿大的人访问 Google.com 他得到了一个不同的索引页面或类似 Google.com/CA 我得到了来自几乎所有国家的流量,因此我必须为每个国家/地区执行此操作,并且我一直在努力使这种情况发生在我的流量上如果有人可以帮助我会很感谢他。 :)

4 个答案:

答案 0 :(得分:0)

那么,您可以使用他们的IP和IP表(公开(http://goo.gl/oeAu7))来确定他们的来源,然后执行:

if ($county = "UK") { // Code for UK here } elseif ($county = "USA") { // Code for USA here }

答案 1 :(得分:0)

选择基于IP的初始国家/地区内容,同时也为用户提供选择国家/地区的选项,有时如果用户在VPN上,则可以通过其他国家/地区进行路由,并且他们会收到错误的内容。如果用户对此无能为力,那将会非常烦人。

一旦他们选择了自己的国家/地区,请将其存储在Cookie中并在下次访问时使用Cookie值而不是IP。

答案 2 :(得分:0)

IP可能是去这里的方式,但只是为了投入我的一角钱(两美分看起来对我来说很便宜): 大多数浏览器会发送一个Accept-Language标头,其中包含用户指定用户希望返回内容所使用的语言的语句。许多这些语言代码都附带国家/地区代码(因此en-US,en -gb,或de-DE)。您可以在$_SERVER['HTTP_ACCEPT_LANGUAGE']中找到这些代码。但是,可能会列出多种语言以及语言质量值(这是毫无意义的,只是说)。为了解决这个问题,我建议一种寻找国家代码并将其与适当位置相匹配的解决方案。如果找不到合适的位置,则使用IP的国家/地区:

<?php
function getCountry() {
    $countries = array( 'us' => 'United States' ); //etc.
    //Let's first try the Accept-Language header
    $languages = explode( ',', $_SERVER['HTTP_ACCEPT_LANGUAGE'] );
    foreach( $languages as $lang ) {
        $lang = array_shift( explode( ';', $lang ) );
        if( strpos( $lang, '-' ) != false ) {
            $country = strtolower( trim( array_pop( explode( '-', $lang ) ) ) );
            if( isset( $countries[$country] ) ) {
                return( $countries[$country] );
            }
        }
    }
    //Fall back to IP's location
    if( isset( $_SERVER['X-Forwarded-For'] ) ) {
        $ip = $_SERVER['X-Forwarded-For']; //Circumvent some basic proxies
    } else {
        $ip = $_SERVER['REMOTE_ADDR'];
    }
    geoip_country_name_by_name( $ip ); //Assuming you have GeoIP
}

echo getCountry();
?>

答案 3 :(得分:0)

我认为您可以在MYSQL数据库上使用ip to country数据库并运行脚本(PHP)从用户获取ip并从数据库中选择国家/地区。 您可以从此链接下载ip到country databaseCSV。 要了解如何在服务器上使用此脚本和数据库,请阅读本文 - http://phpweby.com/software/ip2country

它对我来说很好。

相关问题