我在一個項目中實施了我的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