我在一个项目中实施了我的IP禁止功能。 首先,我想避免.htaccess这个目的,因为CMS可能会在修改时重置它,所以我必须使用PHP-send-header-and-die解决方案。 很明显,每个HTTP请求都会被检查。PHP文件存在检查与MySQL选择服务器负载
考虑的高度trafficated网站,我有两个解决方案,存储IP禁令的相关信息:
1 - 在一个目录,假设/禁止/,我可以创建N个文件,其中N =禁止的IP数,所以:
/bans/23.23.23.23.ban
将禁止23.23.23.23,在这种情况下,所有我从我的脚本做的是检查与file_exists,例如:
<?php
if(file_exists("bans/".$_SERVER['REMOTE_ADDR'].".ban"){
header("HTTP/1.0 403 Forbidden");
die();
}
else{
// Continue surfing ....
}
?>
2 - 使用MySQL表,比如说cms_bans,并为每个HTTP请求执行一次SELECT以检查IP是否在禁止列表中。
考虑到这两个解决方案,哪一个对过载影响较小(文件系统vs mysql:D),假设MySQL查询缓存被禁用?
请只激发答案,而不仅仅是个人喜好。
感谢
您是否在制作CMS,或者您在使用预制的吗? – Codeacula 2010-10-03 15:21:22
显然,如果我做了一个预制的CMS,我没有问题使用.htaccess :) – 2010-10-03 15:24:41
你有没有想过使用APC?你可以使用'apc_exists()'方便地检查IP是否被禁止,并且它会很快。这会更复杂一点,因为APC数据存储在RAM中。如果服务器恰好重新启动或清除APC存储,您必须在MySQL(或基于文件)中保存禁用的“永久”副本,并将禁止从该处加载到APC。更多的代码,但肯定比两种解决方案都要快。 – MartinodF 2010-10-03 17:11:30