PHP GeoIP 循环错误

Posted

技术标签:

【中文标题】PHP GeoIP 循环错误【英文标题】:PHP GeoIP loop error 【发布时间】:2014-04-06 16:06:24 【问题描述】:

我正在使用 php 重定向脚本,它给我一个默认重定向的持续循环错误,这是代码

<?php
// ccr.php - country code redirect
require_once('geoplugin.class.php');
$geoplugin = new geoPlugin();
$geoplugin->locate();
$country_code = $geoplugin->countryCode;
switch($country_code) 
case 'US':
header('Location: http://www.domain.com/en');
exit;
case 'FR':
header('Location: http://www.domain.com/fr');
exit;
case 'BE':
    header('Location: http://www.domain.com/fr');
exit;


default: // exceptions
    header('Location: http://www.domain.com');
exit;

?>

【问题讨论】:

如果您已经尝试定位 IP,则需要设置一个标志,否则在加载脚本时每次重定向后它将一遍又一遍地重新开始。或者检查您是否已经在正确的 URL 上,否则重定向。 如果您的默认条件重定向回您所在的页面,您将陷入循环。您需要将该行为更改为其他行为。 @Quasdunk 以及如何做到这一点?我知道这个概念,但我不是编码员 @JohnConde 是的,但怎么做?我不是编码员:/ 【参考方案1】:

您陷入循环的原因是您的脚本可能会在每个页面和每个页面加载时执行。

您很可能正在使用会话,因此最方便的方法是在此处设置一个您已经检查过该用户的标志:

<?php

//...

// Do this only if the flag is not set
if( ! isset($_SESSION['checkedGeoIp']) )

  // Set the flag here so you don't need to set it after each case.
  // Now this will be set for all requests during the session and 
  // the above if-statement will prevent from checking and redirecting again
  $_SESSION['checkedGeoIp'] = true;

  // Execute the GeoIP logic...
  require_once('geoplugin.class.php');
  $geoplugin = new geoPlugin();
  $geoplugin->locate();
  $country_code = $geoplugin->countryCode;

  switch ($country_code)
  
      // ...
  


【讨论】:

谢谢你,问题是脚本不工作,所以我切换到 javascript 脚本,如果你能帮助我将不胜感激***.com/questions/22897314/…

以上是关于PHP GeoIP 循环错误的主要内容,如果未能解决你的问题,请参考以下文章

致命错误:调用未定义的函数 geoip_open()

重定向到子域会导致重定向循环错误

调用未定义的函数 geoip

如何在 php 中进行 geoip 查找?

nginx geoip 错误处理

Net_GeoIP 返回致命错误