Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] Banowanie IP
Forum PHP.pl > Forum > Przedszkole
terreska
Mam taki kod, co należy zrobić żeby można było banować kilka adresów IP, a nie tylko 1? Bardzo proszę o pomoc.

  1. <?php
  2. $userip = $HTTP_SERVER_VARS['REMOTE_ADDR']; 
  3. $banip = "11.11.11.11"; 
  4. if ($userip==$banip) 
  5. { 
  6. echo 'Twoje IP zostało zablokowane'; 
  7. exit; 
  8. }
  9. ?>
kriqs
  1. <?php
  2. $userip = $_SERVER['REMOTE_ADDR']; 
  3. $banip =array('11.11.11.11','27.27.27.27'); 
  4.  
  5. foreach( $banip as $ip )
  6. {
  7. if ($userip==$ip) 
  8. { 
  9. echo 'Twoje IP zostało zablokowane'; 
  10. exit; 
  11. }
  12. }
  13. ?>


moze nie dzialac smile.gif z pamieci napisalem to smile.gif.

pozdrawiam

ps.
odpowiedz na twoje pytanie to : "przerobic skrypt" smile.gif
wipo
Zrób tablicę ban_ip=array('127.0.0.1','192.168.1.1'); itd....
a potem sprawdzaj
if (in_array($userip,$ip) ){
//jest w tablicy czyli zabanowany
} else {
//nie ma go w tablicy
}
terreska
Dziękuję snitch.gif
Mam teraz tak:

  1. <?php
  2. $userip = $HTTP_SERVER_VARS['REMOTE_ADDR']; 
  3. $banip=array('11.11.11.11', '123.132.123');
  4. if (in_array($userip,$banip))
  5. { 
  6. echo 'Twoje IP zostało zablokowane'; 
  7. exit; 
  8. }
  9. ?>


Działa smile.gif

A teraz kolejna rzecz...
Jak zrobić, aby adresy ip były pobierane z pliku lub z bazy danych?
wipo
A zrób tak jak napisałem. Będzie o wiele szybciej i będzie mniej kodu
terreska
Już właśnie tak zrobiłam snitch.gif i liczę na dalszą pomoc smile.gif
Cysiaczek
Plik ipeki.txt (każdy IP w oddzielnej lini)
Kod
213.432.43.212
243.42.324.21
23.445.12.34


Zmiany w kodzie to
  1. <?php
  2. //zamiana
  3. $banip=array('11.11.11.11', '123.132.123');
  4. //na
  5. $banip=file("ipeki.txt");
  6. ?>


Pozdrawiam.
terreska
Ta sama zmiana chyba nie wystarczy.
Co jeszcze oprócz tego zmienić?
Cysiaczek
Owszem, wystarczy, chyba, że inne rzeczy zepsułaś : ) (do funkcji file() musisz podać nazwę pliku razem ze ścieżką)

Pozdrawiam.
terreska
A co z tym:
  1. <?php
  2. if (in_array($userip,$banip))
  3. ?>

?

... no bo mi nie działa, tzn. żaden błąd nie wyskakuje, ale i nie banuje.
Cysiaczek
Tzn jak nie banuje?
Zamiast HTTP_SERVER_VARS uzywaj $_SERVER["REMOTE_ADDR"];.
Zresztą - odrobina samodzielności nie zawadzi prawda?

Pozdrawiam.
terreska
No nie banuje, jak może banować jak tutaj:
if (in_array($userip,$banip))
sprawdza się tablice a nie plik...?
Sabistik
Zacznij używać manuala bo ta rozmowa do niczego nie prowadzi. Zobacz co zwraca file()" title="Zobacz w manualu php" target="_manual
Cysiaczek
questionmark.gif? Poczytaj sobie o funkcji file()
terreska
No ok, sory, ale zrobiłam wszystko tak jak napisaliście i nic... ani komunikatu o błędzie ani bana.
Cysiaczek
Problem leży w tzw. whitespaces.
Normalnie należy przeiterować całą tablicę i usunąć białe znaki za pomocą funkcji rtrim(). Jednak można tez "na lewo" - dodać znak końca lini.
  1. <?php
  2. if (in_array($userip."n", $banip)) {
  3. ?>


Pozdrawiam.
terreska
Wielkie dzięki, działa smile.gif

Teraz jeszcze chciałabym dodać do tego to:
  1. <?php
  2. $replace = array( '*' => '([0-9]{1,3})', '?' => '([0-9]{1})', '.' => '.' );
  3. ?>


Tylko za bardzo nie wiem gdzie to wstawić i czy ta zmienna jest dobrze zadeklarowana w mojej sytuacji?
Sabistik
Człowieku zastosuj lepiej jakieś gotowe rozwiązanie Temat: Banowanie z maskami i
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.