国家地理位置会将我重定向到错误的链接?

时间:2016-01-08 15:53:53

标签: php redirect geolocation geo

所以我有这个代码,我的ip来自国家ph;

<?php
require_once('geoip.inc');

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

switch ($country) {
 case 'ph':
     $location = 'url/ph/index.php';
     break;
 case 'us':
     $location = 'url/intl/index.php';
     break;
 case 'in':
     $location = 'url/intl/index.php';
     break;
 default:
     $location = 'url/intl/index.php';
     break;
 }
 header('Location: '.$location.'');
 ?>  

每当我尝试使用该代码访问我的网站并使用我自己的家庭ip(菲律宾)时,它会继续将我重定向到intl / index.php页面。一切都在我的主目录中,就像geoip.inc和geoip.dat一样。它们都已经在根文件夹中了。

任何人都知道我在这里失踪了什么?谢谢!

1 个答案:

答案 0 :(得分:0)

函数geoip_country_code_by_addr以大写形式返回国家/地区代码,如PH,US,IN等。当您输入切换小写国家/地区代码时,它始终包含默认数据。

因此需要将contry代码更改为大写,如

<?php
require_once('geoip.inc');

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

switch ($country) {
 case 'PH':
     $location = 'url/ph/index.php';
     break;
 case 'US':
     $location = 'url/intl/index.php';
     break;
 case 'IN':
     $location = 'url/intl/index.php';
     break;
 default:
     $location = 'url/intl/index.php';
     break;
 }
 header('Location: '.$location.'');
 ?>