你可以做到這一點從該表中選擇每一行,然後推動它在陣列中,像這樣(在這裏我使用mysqli的,但它與正常的MySQL工作爲好。你只需要修改代碼一點點):
$deny = array();
$sql = "SELECT * FROM `banned_addresses`";
$result = $mysqli->query($sql);
while ($row = $result->fetch_assoc()) {
array_push($deny, $row["address"];
}
if(in_array ($_SERVER['REMOTE_ADDR'], $deny)) {
die("Your IP has been banned from accessing the website");
}
但是有更好的方法來禁止IP。例如,您可以檢查表中是否存在該IP地址的條目。這是更快:
$sql = "SELECT * FROM `banned_addresses`";
$result = $mysqli->query($sql);
if(mysql_fetch_array($result) !== false) {
die("Your IP has been banned from accessing the website");
}
對於許多服務器,也有方法可以直接禁止IP地址。對於Apache,有this指南。
如果您使用Apache,'.htaccess'文件可以更輕鬆地完成IP阻塞:http://www.htaccess-guide.com/deny-visitors-by-ip-address/ –
另外,請閱讀欺騙'$ _SERVER'值:https://stackoverflow.com/questions/5092563/how-to-fake-serverremote-addr-variable –
爲什麼你要使用in_array,如果你的數據庫中每行有一個IP。你不能只是做一個選擇,並檢查你的ban_list表中是否存在$ _SERVER ['REMOTE_ADDR']? – GullDe