PHP Geoplugin无法正常工作

时间:2018-08-23 20:03:22

标签: php geolocation

如果用户来自美国或不讲葡萄牙语的任何其他国家,我需要重定向。我的代码:

    require_once('geoplugin.class.php');
    $geoplugin = new geoPlugin();
    $geoplugin->locate();
    // create a variable for the country code
    $var_country_code = $geoplugin->countryCode;
    $arrCountryCode = array('BR', 'PT', 'CV', 'GW', 'AO', 'MZ', 'TL', 'ST', 'GQ');
    $hasEn = explode('', $_SERVER[REQUEST_URI]); 
    // $geoplugin = unserialize(file_get_contents("http://www.geoplugin.net/php.gp?ip=".$geoplugin->ip));

    // redirect based on country code && if the url has not /en && if is the first view:
    if(!in_array($var_country_code, $arrCountryCode) && $hasEn[1] != 'en' && $_COOKIE['redirect'] == '') {
        setcookie('redirect', 'true'); //allow to delete /en
        header('Location: http://'.$_SERVER[HTTP_HOST].'/en'.$_SERVER[REQUEST_URI]);
    }
}

每个人都将重定向到/ en,即使它来自巴西。我的代码有什么问题?

P.S。使用geoplugin library

2 个答案:

答案 0 :(得分:2)

#1

请打开PHP错误和警告的显示:error_reporting(E_ALL); 您可能会看到geoplugin的错误,例如:

  

错误geoPlugin类错误:无法检索数据。要么编译具有cURL支持的PHP,要么在第137行的php.ini中启用allow_url_fopen

#2

 $hasEn = explode('', $_SERVER[REQUEST_URI]); 

此代码会将变量$hasEn设置为false(并产生警告),因为您使用的是空定界符。

然后,$hasEn[1] != 'en'将始终取值为true。因此,也将不必要地从en站点重定向用户一次。

答案 1 :(得分:0)

您的重定向经过硬编码,可以将人们定向到/ en:

header('Location: http://'.$_SERVER[HTTP_HOST].'/en'.$_SERVER[REQUEST_URI]);

代替使用返回值$var_country_code

应该看起来更像这样: header('Location: http://'.$_SERVER[HTTP_HOST].'/'.$var_country_code.'/'.$_SERVER[REQUEST_URI]);