Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Adres IP - skrypt, Jak wykonać skrypt?
Szunaj85
post
Post #1





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Chciałbym się zapytać o jedną rzecz. Mianowicie chodzi mi o adres IP.
Napisałem skrypt, który wykonuje pewną czynność, gdy początek adresu IP użytkownika jest równy temu w zmiennej. Dokładnie chodzi o pogrubiony kawałek: xxx.xxx.xxx.xxx

  1. <?php
  2. $ip = $_SERVER[&#092;"REMOTE_ADDR\"];
  3. $poczatek_ip = '83';
  4. $czesc_ip = $poczatek_ip;
  5. $czesc_ip = &#092;".[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}\";
  6. if (ereg($poczatek_ip,$ip))
  7. echo &#092;"działa\";
  8. ?>


Ten skrypt działa bo sprawdzałem. Gdy w zmiennej wpisałem początek IP równe mojemu działał, natomiast gdy
w zmiennej wpisałem początek IP inny niż mój nie działał. Jednak każdy kraj ma więcej niż jeden początkowy numer IP,
a do jednej zmiennej chyba nie da się przypisać kilku liczb. Pomyślałem więc o tablicy.

Chodzi o skrypt, który odczytyłałby IP użytkownika, następnie przeszukiwałby tablicę i jeżeli początek adresu IP użytkownika jest równy liczbie znajdującej się w tablicy wykonywałby pewną czynność, gdy taki numer nie znajduje się w tablicy nic by nie robił albo zwracał false.

  1. <?php
  2. $ip = $_SERVER[&#092;"REMOTE_ADDR\"];
  3. $czesc_ip = $poczatek_ip;
  4. $czesc_ip = &#092;".[0-9]{1,3}.[0-9]{1,3}.[0-9]{1,3}\";
  5.  
  6. $ip2 = $tablica;
  7. $tablica = array();
  8. $tablica[0] = '62';
  9. $tablica[1] = '67';
  10. $tablica[2] = '81';
  11. $tablica[3] = '83';
  12. $tablica[4] = '84';
  13.  
  14. $szukaj_ip = array_search($ip2, $tablica);
  15. if ($szukaj_ip == $poczatek_ip){
  16. if (ereg($poczatek_ip,$ip))
  17. {echo &#092;"działa\";}
  18. else {echo &#092;"nie działa\";}}
  19. else {echo &#092;"nie działa podwójnie\";}
  20. ?>


Ten skrypt już nie działa. Nie wiem czy dobrze się za to wziołem i gdzie są błędy. Interesuje mnie również rozwiązanie z kilkoma tablicami (kilka krajów). Prosiłbym o pomoc w tej sprawie.
Dopiero początkuje w PHP (z forum włącznie), więc proszę o wyrozumiałość. (IMG:http://forum.php.pl/style_emoticons/default/sad.gif)

Ten post edytował Szunaj85 11.05.2008, 21:21:56
Powód edycji: Poprawiłem tą choinkę. /webdicepl
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Babcia@Stefa
post
Post #2





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

Ostrzeżenie: (0%)
-----


Ja mam chyba najlepsze rozwiązanie z opisem:

  1. <?php
  2. $ip = $_SERVER['REMOTE_ADDR']; // pobiera adres ip
  3. $blocked = array('127' => 'Neostrada!', '88' => 'Nie wiem jakiś inny (IMG:http://forum.php.pl/style_emoticons/default/haha.gif) '); // lista początków adresu IP
  4. $exp = explode('.', $ip); // rozbija adres ip i wrzuca do tablicy (4 części najczęściej - jak się trafi dziwny adres ip, to będzie inna ilość ale takie coś się chyba nie
     zdarza)
  5. $echo = NULL; // początkowa wartość zmiennej $echo, tak aby nie było nawet notice'a jeśli masz full error_reporting - co nie powinno mieć miejsca publicznie, null, NULL oznacza pustkę, 0 ;) 
  6.  
  7. if(in_array($exp[0], $blocked) OR isset($blocked[$exp[0]])) // sprawdza czy element $exp[0] istnieje w tablicy (ten element to pierwszy element tablicy $exp czyli pierwszy blok IP dla 127
    .0.0.1 będzie 127) a isset sprawdza czy wiadomość jest a jeśli jest wiadomość to i jest począ
    tek w tablicy :] - jedna funkcja in_array zwróci false gdy jest wiadomość, ale za to isset zwróci 
    true ;)
  8. {
  9. $echo .= 'IP: ' .$ip; // pokazuje adres ip (szybsze działanie daje zapisywanie do zmiennej - tak robią systemy szablonów)
  10. if(isset($blocked[$exp[0]])) // sprawdza czy jest dostepna wiadomość
  11. $echo .= '<br/>Wiadomość: ' .$blocked[$exp[0]]; // jeśli jest dostępna dodaje do zmiennej $echo
  12. } else // jeśli początek ip nie znajduje się w tablicy $blocked to doda do zmiennej $echo
     komunikat
  13.  $echo .= 'Twoje ip nie jest zablokowane';
  14.  
  15. echo $echo; // wyświetla zmienną $echo
  16. ?>


Dziękuję, Babcia@Stefa
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 8.10.2025 - 05:44