【问题标题】:php header location wont workphp标头位置不起作用
【发布时间】:2012-03-08 02:10:50
【问题描述】:

我尝试创建一个基于 ip 的拒绝列表,该列表将 ip 号存储在 mysql 中。基本上,如果用户的 ip 在数组中,我会尝试进行标头重定向,但它不起作用。怎么了?

$ip_array = array();
$ip_ban_query = mysql_query("SELECT ip FROM banned_ips");
while ($deny = mysql_fetch_assoc($ip_ban_query)){

$add_ip = $deny['ip'];
$ip_array[] = $add_ip;

}
if (in_array ($_SERVER['REMOTE_ADDR'], $ip_array)) {
   header("Location: http://www.google.com/");
   exit();

}

【问题讨论】:

  • 不是重定向被禁IP吗?它根本不重定向吗?它究竟是如何“不工作”的? in_array 和括号之间有一个空格,但我不确定这是否重要。
  • 什么都没有发生,它不是重定向。
  • 您的代码看起来不错,您是在 localhost 上执行此操作的吗?您的 $ip_array 是否包含预期值?
  • 我很抱歉这个愚蠢的问题,但我在查询之前忘记了数据库连接...这是工作太多的错误 :) 非常感谢。

标签: php mysql arrays http-headers


【解决方案1】:

我们可以在这里大大简化您的代码。降低复杂性几乎总是可以消除错误。 :)

// There are several different methods to accomplish this, and you really
// should be using statements here, but both are out of scope of this question.
$ipBanQuery = sprintf("SELECT ip FROM banned_ips WHERE ip = '%s'", mysql_real_escape_string($_SERVER['REMOTE_ADDR']));

$result = mysql_query($ipBanQuery);
if (mysql_num_rows($result)) {
  header('Location: http://www.google.com/');
  exit();
}

这还取决于您在哪里调用此代码。请特别确保在向浏览器输出任何内容之前调用它 - 杂散空格、HTML 或其他调试信息将阻止发送任何额外的标头。检查您的网络服务器的错误日志,看看是否有问题发生。

【讨论】:

  • 我很抱歉这个愚蠢的问题,但我在查询之前忘记了数据库连接...这是工作太多的错误 :) 非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-17
  • 2013-07-28
  • 2011-04-02
相关资源
最近更新 更多