Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php &引用;此网页有一个重定向循环";(使用GeoIP重定向网站)_Php_Redirect_Geoip - Fatal编程技术网

Php &引用;此网页有一个重定向循环";(使用GeoIP重定向网站)

Php &引用;此网页有一个重定向循环";(使用GeoIP重定向网站),php,redirect,geoip,Php,Redirect,Geoip,我正在尝试向我的网站添加一些代码,以便根据用户的IP地址重定向用户。无论我做什么,我都会收到一条“此网页有重定向循环”的消息 这是我的密码: if(isset($_GET['FirstTimer'])){ setcookie('FirstTimer','something',strtotime('+1 year'),'/'); $_COOKIE['FirstTimer']='something'; } require_once('geoip.inc'); $gi = geo

我正在尝试向我的网站添加一些代码,以便根据用户的IP地址重定向用户。无论我做什么,我都会收到一条“此网页有重定向循环”的消息

这是我的密码:

if(isset($_GET['FirstTimer'])){
    setcookie('FirstTimer','something',strtotime('+1 year'),'/');
    $_COOKIE['FirstTimer']='something'; 
}

require_once('geoip.inc');

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

if(!isset($_COOKIE['FirstTimer'])): 
    if($_SERVER['REQUEST_URI'] == '/'){ 
        switch((string)$country) {
            case 'GR':
                header('Location: http://mywebsite.com/');
                break;
            case 'RU':
                header('Location: http://mywebsite.com/ru');
                break;
            default:
                header('Location: http://mywebsite.com/en');
        }
    }
endif;

geoip_close($gi);
“FirstTimer”cookie用于确定访问者是否是新访问者(因为我只想重定向新访问者)


代码放在index.php文件的顶部,在“\”标记之前没有空格。

我假设未设置
$\u GET['FirstTimer']
。所以你的开关总是被执行的

当geoip返回
GR
时,脚本将重定向到
http://mywebsite.com/
请再说一遍。
$\u服务器['REQUEST\u URI']
返回
/
,您又回到了交换机中

这是你的循环

编辑

我把你的剧本改了一点。如果用户第一次访问,则不必记录日志(这毫无意义),只需在用户上次访问时记录即可。 如果未设置此cookie,请启动geoip并重定向用户。如果已设置,请更新时间

if(!isset($_COOKIE['last_visit'])) {
    setcookie('last_visit',date("Y-m-d H:i:s"),strtotime('+1 year'),'/');

    require_once('geoip.inc');

    $gi = geoip_open('GeoIP.dat', GEOIP_MEMORY_CACHE);
    $country = geoip_country_code_by_addr($gi, $_SERVER['REMOTE_ADDR']);
    if($_SERVER['REQUEST_URI'] == '/'){ 
        switch((string)$country) {
            case 'GR':
                header('Location: http://mywebsite.com/');
                break;
            case 'RU':
                header('Location: http://mywebsite.com/ru');
                break;
            default:
                header('Location: http://mywebsite.com/en');
        }
    }

    geoip_close($gi);
} else {
    setcookie('last_visit',date("Y-m-d H:i:s"),strtotime('+1 year'),'/');
}
但是您肯定应该增强这个脚本,因为如果您有一个用户使用以下内容进入您的页面:
http://yourwebsite.com/great/article/link.html

也许您对此有翻译,但用户不会被重定向。

尝试
die($\u COOKIE['FirstTimer'])
直接在
if(!isset($\u COOKIE['FirstTimer']):
之前,看看它是否让senseI尝试过,空白页被加载。很好,所以它是空的。为什么您的帖子第1行的代码没有正确设置
$\u COOKIE['FirstTimer']
?请尝试
die(“”.print\r($\u COOKIE,true)。“”)Instedi更新了我的答案。看一看。这是另一种观点,因为我认为您在第一次访问时不会很幸运地设置查询参数。您的意思是我应该完全删除“GR”案例吗?不,我假设在开始时未设置
$\u GET['FirstTimer']
,并且未创建cookie。所以,检查一下原因。即使设置了,也无法连接到您的交换机。我现在可以看出问题在于cookie,而不是重定向。根据这里的评论,我自己修改了代码,它成功了。你的代码版本比我的好:)谢谢!