Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokowanie IP
Forum PHP.pl > Forum > PHP
urbizdw
Witam!
Chcialem napisac skrypt w php ktory czyta z pliku adresy IP (adresy umieszczone sa linijka pod linijka) i jesli jest taki adres w pliku to zeby wyswietlilo tekst zablokowane a jesli niema adresu to jestes. Co jest nie tak z moim skryptem questionmark.gif


  1. <?php
  2. function ip_prawdziwe() {
  3. if ($_SERVER['HTTP_X_FORWARDED']) {
  4. $ip_prawdziwe= $_SERVER['HTTP_X_FORWARDED_FOR'];
  5. }
  6. else {
  7. $ip_prawdziwe = $_SERVER['REMOTE_ADDR'];
  8. }
  9.  
  10. return $ip_prawdziwe;
  11. }
  12.  
  13. $ip= IP_prawdziwe();
  14.  
  15. $plik= file("blockip.dat");
  16. $n= 0;
  17. while($n < count($plik)){
  18. if($plik[$n] == $ip){
  19. echo 'zablokowane';
  20. }
  21. else{ echo 'jestes';
  22. $n++;
  23. }
  24. }
  25. ?>
Jojo
W pliku jest coś takiego jak znaki końca linii. Jeśli rozbijesz plik na tablicę przy pomocy funkcji file(), to te znaczki nadal tam są i porównanie zmiennej $ip z linijką pliku nigdy nie da Ci poprawnego rezultatu. Musisz przed porównaniem pozbyć się znaków końca linii z elementów tablicy $plik.
nospor
Ano to jest nie tak, ze nie zajrzales do manuala:
http://pl.php.net/manual/pl/function.file.php
Cytat
Notatka: Każda linia w wynikowej tabeli będzie zawierać znak(i) końca linii, jeśli nie chcesz ich musisz uzyć rtrim().

Co oznacza ze te twoje IP z pliku nigdy sie nie bedzie rownalo z tym co koles aktualnie wszedl, bo to z pliku bedzie mialo jeszcze znak konca linii na koncu. Co nalezy zrobic w tej sytuacji masz napisane smile.gif

pozatym zwiekszanie tego $n w warunku to baaaaaardzo zly pomysl. Jak ci trafi na zbanowane IP to z tej petli nigdy nie wyjdziesz winksmiley.jpg
urbizdw
Probowalem:
  1. <?php
  2. function ip_prawdziwe() {
  3. if ($_SERVER['HTTP_X_FORWARDED']) {
  4. $ip_prawdziwe= $_SERVER['HTTP_X_FORWARDED_FOR'];
  5. }
  6. else {
  7. $ip_prawdziwe = $_SERVER['REMOTE_ADDR'];
  8. }
  9.  
  10. return $ip_prawdziwe;
  11. }
  12.  
  13. $ip= IP_prawdziwe();
  14.  
  15. $plik= file("blockip.dat");
  16. $n= 0;
  17. while($n < count($plik)){
  18. rtrim($plik, 't');
  19. if($plik[$n] == $ip){
  20. echo 'jestes';
  21. }
  22. else{ echo 'nie jestes';
  23. }
  24. }
  25. ?>



tez nic sad.gif wiec co jest jeszcze nie tak??
cinekz
  1. <?php
  2. function ip_prawdziwe() {
  3. if ($_SERVER['HTTP_X_FORWARDED']) {
  4. $ip_prawdziwe= $_SERVER['HTTP_X_FORWARDED_FOR'];
  5. }
  6. else {
  7. $ip_prawdziwe = $_SERVER['REMOTE_ADDR'];
  8. }
  9.  
  10. return $ip_prawdziwe;
  11. }
  12.  
  13. $ip= IP_prawdziwe();
  14.  
  15. $plik= file("blockip.dat");
  16. $n= 0;
  17. while($n < count($plik)){
  18. if( rtrim( $plik[$n] ) == $ip){
  19. echo 'zablokowane';
  20. }
  21. else{ echo 'jestes';
  22. $n++;
  23. }
  24. }
  25. ?>
urbizdw
To tez nie dziala bo az petla krazy caly czas w kolko i nie przestaje dzialac tongue.gif az przegladarka pada smile.gif
nospor
NO ale czytaj chlopie cosie do ciebie pisze:
Cytat
pozatym zwiekszanie tego $n w warunku to baaaaaardzo zly pomysl. Jak ci trafi na zbanowane IP to z tej petli nigdy nie wyjdziesz

Masz te zwiekszanie $n dac niezaleznie od warunku...
urbizdw
A wiec dalem :
  1. <?php
  2. function ip_prawdziwe() {
  3. if ($_SERVER['HTTP_X_FORWARDED']) {
  4. $ip_prawdziwe= $_SERVER['HTTP_X_FORWARDED_FOR'];
  5. }
  6. else {
  7. $ip_prawdziwe = $_SERVER['REMOTE_ADDR'];
  8. }
  9. return $ip_prawdziwe;
  10. }
  11. $ip= IP_prawdziwe();
  12. $plik= file("blockip.dat");
  13. $n= 0;
  14. while($n < count($plik)){
  15. if( rtrim( $plik[$n] ) == $ip){
  16. echo 'zablokowane';
  17. }
  18. else{ echo 'jestes';
  19. }
  20. $n++;
  21. }
  22. ?>



Dałem $n++ poza warunek ale nadal cos nie tak. Powinno wyswietlac jedna z informacji ze albo zablokowane albo ze jestes. a mi wyswietla zablokowanejestes. co jest nie tak??
tiraeth
Panowie, mamy do czynienia z "użytkownikiem"...

Przeanalizuj jeszcze raz działanie programu czyli napisz sobie graficzny algorytm....

  1. <?php
  2. $ip = ( $_SERVER['HTTP_X_FORWARDED'] ) ? $_SERVER['HTTP_X_FORWARDED_FOR'] : $_SERVER['REMOTE_ADDR'];
  3.  
  4. $plik = file('blockip.dat');
  5. $n = 0;
  6.  
  7. $banned = false;
  8. while ( $n < count($plik) )
  9. {
  10. if ( rtrim( $plik[$n] ) == $ip )
  11. {
  12. $banned = true;
  13. break;
  14. }
  15. }
  16.  
  17. if ( $banned )
  18. {
  19. echo '<span style="color:#ff0000">Wstęp zablokowany</span>';
  20. }
  21. else
  22. {
  23. echo '<span style="color:#00ff00">Wstęp dozwolony</span>';
  24. }
  25. ?>
Mystic007
Ja bym w pętlę wywalił, i dał w if'ie funkcję in_array" title="Zobacz w manualu php" target="_manual. winksmiley.jpg Powodzenia
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.