2012-03-08 52 views
0

我试图做一个基于IP的拒绝列表,其中存储的IP号码在MySQL中。基本上我尝试头重定向,如果用户的IP在数组中,但它不会工作。哪里不对?php头位置不会工作

$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(); 

} 
+0

它不重定向禁止的IP?它不是重定向吗?它究竟如何“不工作”? 'in_array'和括号之间有一个空格,但我不确定这是否重要。 – SenorAmor 2012-03-08 02:14:18

+0

什么也没有发生,它不是重定向。 – 2012-03-08 02:16:15

+0

你的代码看起来不错,你是否在localhost上执行此操作?您的$ ip_array是否包含预期值? – arma 2012-03-08 02:17:28

回答

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或其他调试信息将阻止任何额外的头文件被发送。检查你的网络服务器的错误日志,看看是否有什么奇怪的事情发生。

+0

我很抱歉这个愚蠢的问题,但我在查询之前忘记了数据库连接...这是工作太多的错误:)非常感谢。 – 2012-03-08 02:36:27

+0

我们都知道这种感觉。真高兴你做到了! :) – Morgon 2012-03-08 02:39:39