2012-03-08 28 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