【问题标题】: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) “美国”

标签: php redirect geolocation geo


【解决方案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;国家:菲律宾
猜你喜欢
  • 1970-01-01
  • 2019-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-01-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多