国家/地区地理位置将我重定向到错误的链接?
Posted
技术标签:
【中文标题】国家/地区地理位置将我重定向到错误的链接?【英文标题】:Country geolocation redirects me to the wrong link? 【发布时间】:2016-04-13 08:51:43 【问题描述】:所以我有这个代码,我的 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 一样。它们都已经在根文件夹中了。
有人知道我在这里缺少什么吗?谢谢!
【问题讨论】:
您是否验证了要解析到的 $country ?尝试回显/转储/记录该变量。 @aynber 嗯抱歉,我该如何记录呢?对这件事真的很陌生。 如果您有某种记录功能,请使用它。否则,请执行var_dump($country)
以确保您得到您所期望的。
@aynber 我删除了我之前的评论,但我设法记录了它,它说“美国”。 1:blah 2:blahstring(2) “美国”
【参考方案1】:
函数 geoip_country_code_by_addr 以大写形式返回国家/地区代码,因此 PH、US、IN 等,当您输入切换小写国家/地区代码时,它始终包含默认数据。
所以需要把国家代码改成大写,比如
<?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.'');
?>
【讨论】:
试过了,但它仍然将我重定向到国际页面。 @Sync 请在切换前添加 var_dump($country);并将结果发布给我们。 我从 var dump 得到这个;字符串(2)“美国” @Sync 所以您的 IP 来自美国而不是 PH,并且交换机正在正确加载国际版本。请在此处查看本网站为您的 IP 提供的国家/地区checkip.com 这真的很奇怪,因为 100% 准确我的 ip 来自 ph;国家:菲律宾以上是关于国家/地区地理位置将我重定向到错误的链接?的主要内容,如果未能解决你的问题,请参考以下文章