Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Blokowanie dostępu do strony
Forum PHP.pl > Forum > Przedszkole
Forgoot
Witam!
Jako że jestem początkujący proszę Was, abyście powiedzieli czy ten skrypt jest poprawnie napisany, jeśli nie to proszę o ewentualną poprawkę i komentarz "co źle" zrobilem... Może da się ten skrypt rozbudować, dodać "coś", jeśli tak to proszę o podpowiedzi...

  1. <?php
  2. /**************************************************************************
  3.  *  Prosty skrypt zabraniający dostępu do strony określonemu adresowi IP  *
  4.  *  zapisanego w pliku ban.txt.                                           *
  5.  **************************************************************************/
  6.  
  7. $adres = strval($_SERVER['REMOTE_ADDR']); 
  8. $ip_zbanowane = @file("ban.txt"); 
  9.     if($_SERVER['REMOTE_ADDR'] == "$ip_zbanowane")
  10.   {
  11.           /*Kod strony*/ 
  12.     }else{
  13. echo("<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP: $adres został zbanowany.");
  14.   }
  15.  
  16. ?>


Plik ban.txt wygląda (przykładowo) tak:
Kod
127.0.0.1
127.0.0.2
127.0.0.3
127.0.0.4


Pozdrawiam.


~mike_mech
mike
Funkcja file() zwraca tablicę, co oznacza, że ta linia:
  1. <?php
  2.  
  3. //...
  4. if($_SERVER['REMOTE_ADDR'] == "$ip_zbanowane")
  5. //...
  6.  
  7. ?>

Jest błędna bo porównujesz stringa do tablicy i to jeszcze źle to robisz (po co Ci znaki cudzysłowiu ).
Lepiej będzie:
  1. <?php
  2.  
  3. //...
  4. if( in_array( $_SERVER['REMOTE_ADDR'], $ip_zbanowane ) )
  5. //...
  6.  
  7. ?>

Teraz php sprawdzi czy adres usera jest w tablicy IP zbanowanych userów.

P.S. $_SERVER może zawierać mało wiarygodny adres IP, aby mieć większą pewnośc co do adresu, użyj funkcji:
  1. <?php
  2. function GetClientIP()
  3. {
  4. $ip = 0;
  5.  
  6. if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  7. {
  8. $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  9. }
  10.  
  11. if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  12. {
  13. $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  14. if( $ip )
  15. {
  16. array_unshift( $ipList, $ip );
  17. $ip = 0;
  18. }
  19. foreach( $ipList as $v )
  20. {
  21. if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  22. {
  23. return $v;
  24. }
  25. }
  26. }
  27.  
  28. return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ];
  29. }
  30.  
  31. ?>
Forgoot
1. Czy kod powinien wyglądać tak?? :
  1. <?php
  2.  
  3. /**************************************************************************
  4.  *  Prosty skrypt zabraniający dostępu do strony określonemu adresowi IP  *
  5.  *  zapisanego w pliku ban.txt.                                           *
  6.  **************************************************************************/
  7.  
  8. $adres = strval($_SERVER['REMOTE_ADDR']); 
  9. $ip_zbanowane = @file("ban.txt"); 
  10.    
  11.    function GetClientIP()
  12. {
  13.     $ip = 0;
  14.     
  15.     if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  16.     {
  17.         $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  18.     }
  19.     
  20.     if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  21.     {
  22.         $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  23.         if( $ip )
  24.         {
  25.             array_unshift( $ipList, $ip );
  26.             $ip = 0;
  27.         }
  28.         foreach( $ipList as $v )
  29.         {
  30.             if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  31.             {
  32.                 return $v;
  33.             }
  34.         }
  35.     }
  36.  
  37.     return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ] == $ip_zbanowane;
  38. } 
  39. echo("<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP: $adres został zbanowany.");
  40.  
  41. ?>



  1. <?php
  2.  
  3. return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ] == $ip_zbanowane;
  4.  
  5. ?>

użyłem tutaj operatora przypisania, niewiem czy dobrze i we właściwym miejscu...

LUB (drugi sposób, w jaki starałem się do skryptu dopisać Twoją funkcję @mike_mech):

  1. <?php
  2. /**************************************************************************
  3.  *  Prosty skrypt zabraniający dostępu do strony określonemu adresowi IP  *
  4.  *  zapisanego w pliku ban.txt.                                           *
  5.  **************************************************************************/
  6.  
  7. include ("funkcja.php");
  8. $adres = strval($_SERVER['REMOTE_ADDR']); 
  9. $ip_zbanowane = @file("ban.txt"); 
  10.     if( in_array( $_SERVER['REMOTE_ADDR'], $ip_zbanowane ) )
  11.   {
  12.           /*Kod strony*/ 
  13.     }else{
  14. echo("<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP: $adres został zbanowany.");
  15.   }
  16.  
  17. ?>

Plik funkcja.php wygląda tak:
  1. <?php
  2. /******************
  3. *  funkcja.php    *
  4. *******************/
  5.  
  6. function GetClientIP()
  7. {
  8.     $ip = 0;
  9.     
  10.     if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  11.     {
  12.         $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  13.     }
  14.     
  15.     if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  16.     {
  17.         $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  18.         if( $ip )
  19.         {
  20.             array_unshift( $ipList, $ip );
  21.             $ip = 0;
  22.         }
  23.         foreach( $ipList as $v )
  24.         {
  25.             if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  26.             {
  27.                 return $v;
  28.             }
  29.         }
  30.     }
  31.  
  32.     return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ];
  33. }
  34.  
  35. ?>


Jeśli jest źle to prosze o nakierowanie mnie na właściwą drogę, bo szczerze mówiąc niewiedziałem zbytnio jak to zrobić poprawnie :/

2. Chciałbym też stworzyć skrypt wyświetlający losowe cytaty z pliku tekstowego. Proszę Was abyście podali mi kolejno jakie funkcje trzeba wykorzystać (czy mam zastosować randomizację?), postaram się zaprezentować potem moje "wypociny" biggrin.gif
Sabistik
  1. <?php
  2.  
  3. function GetClientIP()
  4. {
  5. $ip = 0;
  6.  
  7. if( ! empty( $_SERVER[ 'HTTP_CLIENT_IP' ] ) )
  8. {
  9. $ip = $_SERVER[ 'HTTP_CLIENT_IP' ];
  10. }
  11.  
  12. if( ! empty( $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] ) )
  13. {
  14. $ipList = explode( ", ", $_SERVER[ 'HTTP_X_FORWARDED_FOR' ] );
  15. if( $ip )
  16. {
  17. array_unshift( $ipList, $ip );
  18. $ip = 0;
  19. }
  20. foreach( $ipList as $v )
  21. {
  22. if( ! eregi( "^(192.168|172.16|10|224|240|127|0.", $v ) )
  23. {
  24. return $v;
  25. }
  26. }
  27. }
  28.  
  29. return $ip ? $ip : $_SERVER[ 'REMOTE_ADR' ];
  30. }
  31.  
  32. $banArr = file("ban.txt");
  33. if(in_array(GetClientIP(), $banArr) )
  34. echo "<b>ERROR!</b> Nie masz uprawnień do oglądania tej strony.<br /> Twój IP:".GetClientIP()." został zbanowany.";
  35.  
  36.  
  37. ?>
mike
Co do 1. @Sabistik podał Ci odpowiedź.

A co do:
Cytat(Forgoot @ 2005-10-28 15:56:28)
2. Chciałbym też stworzyć skrypt wyświetlający losowe cytaty z pliku tekstowego.

  1. <?php
  2.  
  3. $arrQuotes = file( 'quotes.txt' );
  4. echo array_rand( $arrQuotes );
  5.  
  6. ?>

Gdzie plik quotes.txt wygląda tak:
Cytat
I spraw Panie aby nam się chciało tak bardzo jak nam się nie chce.
Nie dyskutuj z debilem! Najpierw sprowadzi Cię do swojego poziomu, a potem pokona doświadczeniem.
Jak najdzie Cię ochota na pracę, usiądź i poczekaj aż przejdzie.

Wystarczy poczytać Manuala.
Albo użyć wyszukiwarki forum, wpisać do niej losowanie i znaleśc to: losowanie liczb z tablicy (temat identyczny, bo co za różnica co losujemy smile.gif )

Zaniedbywanie manuala i wyszukiwarki jest na tym forum karane aaevil.gif
Forgoot
Znalazłem, napisałem, w ten sam dzień co zadałem pytanie dot. losowych cytatów, ale niestety nie mam (chwilowo) dostępu do internetu 24 godziny na dobę.... więc piszę dziś sad.gif

Oto moje rozwiązania dotyczące losowych cytatów:
dwa kody wyświetlające losowe cytaty (pobierane z tablicy)
1.
  1. <?php
  2. /*********************************
  3.  * Prosty skrypt wyświetlający * 
  4.  * losowy cytat tablicy *
  5.  * version: 0.2  *
  6.  *********************************/
  7.  
  8. echo("Losowy cytat: ");
  9. //tablica zawierająca cytaty
  10. $cytat = array(
  11. '1' => 'Jakiś cytat 1',
  12. '2' => 'Jakiś cytat 2',
  13. '3' => 'Jakiś cytat 3',
  14. '4' => 'Jakiś cytat 4',
  15. '5' => 'Jakiś cytat 5'
  16. ); 
  17.  
  18. $numer=rand(1,5);
  19.  
  20. echo ("$cytat[$numer]");
  21. ?>



2.
  1. <?php
  2. /*********************************
  3.  * Prosty skrypt wyświetlający * 
  4.  * losowy cytatz tablicy *
  5.  * version: 0.2  *
  6.  *********************************/
  7.  
  8. echo("Losowy cytat: ");
  9.  
  10. //tablica zawierająca cytaty
  11. $cytat = array(
  12. '1' => 'Jakiś cytat 1',
  13. '2' => 'Jakiś cytat 2',
  14. '3' => 'Jakiś cytat 3',
  15. '4' => 'Jakiś cytat 4',
  16. '5' => 'Jakiś cytat 5',
  17. '6' => 'Jakiś cytat 6',
  18. '7' => 'Jakiś cytat 7',
  19. '8' => 'Jakiś cytat 8',
  20. '9' => 'Jakiś cytat 9',
  21. '10' => 'Jakiś cytat 10'
  22. ); 
  23.  
  24. srand((float) microtime() * 10000000); //inicjujemy generator liczb losowych 
  25.  
  26. $cytat = $cytat[array_rand($cytat)]; //wybieramy jeden losowy cytat z tablicy
  27.  
  28. echo "[ $cytat ]"; //wyświetlamy losowy cytat
  29. ?>


3 Tutaj napisałem kod podobnego skryptu do tych w/w, tylko teraz cytaty pobierane są z pliku...

  1. <?php
  2. /*********************************
  3.  * Prosty skrypt wyświetlający * 
  4.  * losowy cytat, pobierany z *
  5.  * pliku: cytat.txt  *
  6.  *********************************/
  7.  
  8. echo("Losowy cytat: ");
  9. $cytat = array();
  10.  
  11. $file = file('cytat.txt'); 
  12. srand((float) microtime() * 10000000); //inicjujemy generator liczb losowych 
  13.  
  14. $cytat = $file[array_rand($file)]; 
  15.  
  16. echo "[ $cytat ]"; //wyświetlamy losowy cytat 
  17. ?>


Plik cytat.txt wygląda tak:
Kod
Jakiś cytat 1
Jakiś cytat 22
Jakiś cytat 3
Jakiś cytat 45
Jakiś cytat 1200
Jakiś cytat 8


Prosiłbym abyście powiedzieli czy nie ma błędów (czy składnia jest zachowana itp...), jeśli są to proszę o komentarz... Dzięki bardzo.
Pozdrawiam!
mike
Dobry programista to leniwy programista, taki, który tobi wszystko jak najprościej. W przykładach, które podałeś jest za dużo kombinowania.
Po co robić tak:
  1. <?
  2. $file = file('cytat.txt'); 
  3. srand((float) microtime() * 10000000); //inicjujemy generator liczb losowych 
  4. $cytat = $file[array_rand($file)]; 
  5. ?>

Skoro można tak:
  1. <?php
  2. </php
  3. $arrQuotes = file( 'quotes.txt' );
  4. echo array_rand( $arrQuotes );
  5. ?>
:?:

Składnia jest zachowana i jako takich błędów nie ma. Ale są to rozwiązania bardzo kipskie.

Czytałeś w ogóle posta, którego napisałem powyżej :?:

Cytat z manuala funkcji srand()
Cytat
Notatka: Począwszy od php 4.2.0, nie trzeba już inicjować generatora liczb losowych przed użyciem.
Forgoot
Ok, dzięki @mike_mech za pomoc biggrin.gif .
Cytat
Dobry programista to leniwy programista..
na przyszłoś zapamiętam winksmiley.jpg
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.