Post
#1
|
|
|
Grupa: Zarejestrowani Postów: 375 Pomógł: 20 Dołączył: 28.07.2006 Ostrzeżenie: (0%)
|
Istnieje bardzo długa lista 12635 zakazanych adresów IP w takiej postaci:
Kod #komentarz #inny komentarz adres IP adres IP adres IP ... Przy wczytywaniu trzeba pominąć komentarze, a następnie sprawdzić, czy adres IP użytkownika jest w bazie. Boty często atakują serwisy masowo, dlatego nie można zarżnąć serwera. Oto kilka sposobów: 1. Wczytać plik funkcją file() do tablicy, a następnie in_array() 2. Wczytać plik funkcją file_get_contents() jako ciąg znaków, a następnie strpos() 3. Zapisać plik jako tablicę PHP, a później include() i in_aray() 4. Wczytać plik do bazy danych, a potem sprawdzać prostym zapytaniem, czy IP jest w bazie 5. Inny sposób? Zmierzyłem czas i pamięć sposobów 1,2,3,4 na PHP 5.3.1 pod kontrolą Windows XP. Wyniki: 1. Czas: 18.3 ms, pamięć: 1.35 MB, szczytowa: 1.86 MB 2. Czas: 2 ms, pamięć: 0.183 MB, szczytowa: 0.516 MB 3. Czas: 40 ms, pamięć: 1.316 MB, szczytowa: 3.078 MB 4. Czas: 0.7 ms, pamięć: 0.0012 MB, szczytowa: 0.341 MB, baza SQLite 3 Uwagi do poszczególnych sposobów: 1. Chociaż sposób zapewnia 100% skuteczność, jest wolny przy dużej liczbie linii 2. Działa szybko, ale może blokować adresy spoza listy, np. wzorzec 80.0.0.0 pasuje do 180.0.0.0 3. To mnie zaskoczyło, bo kod PHP z tablicą wczytuje się najdłużej i pożera pamięć! 4. Nie wiemy, ile pamięci używa baza. Odczyt z SQLite szybki, podobnie będzie w MySQL.
Ten post edytował WebCM 21.04.2012, 11:58:22 |
|
|
|
WebCM Optymalne wczytywanie i porównywanie adresów IP 21.04.2012, 11:48:44
Fifi209 Zapisuj ip jako:
ip2long nie powinno być problemów... 21.04.2012, 12:15:53
WebCM Plik jest często aktualizowany, więc wygodniej będ... 21.04.2012, 12:26:01 
Fifi209 Cytat(WebCM @ 21.04.2012, 13:26:01 ) ... 21.04.2012, 12:28:03
WebCM Cytat(Fifi209)Jeżeli czarna lista jest w bazie, wy... 21.04.2012, 18:13:33 ![]() ![]() |
|
Aktualny czas: 23.12.2025 - 08:56 |