Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Adres IP - skrypt, Jak wykonać skrypt?
Szunaj85
post 11.05.2008, 19:53:49
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ść. sad.gif

Ten post edytował Szunaj85 11.05.2008, 21:21:56
Powód edycji: Poprawiłem tą choinkę. /webdicepl


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
Babcia@Stefa
post 11.05.2008, 19:57:23
Post #2





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

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


Powinno działać :]

  1. <?php
  2. $ip = $_SERVER['REMOTE_ADDR'];
  3. $blocked = array('83', '88');
  4. $exp = explode('.', $ip);
  5.  
  6. if(in_array($exp[0], $blocked))
  7. {
  8.  echo 'Działa';
  9. } else
  10.  echo 'Twoje ip nie jest zablokowane';
  11. ?>


@edit
Przed chwilą sprawdzałem, działa.

Dziękuję, Babcia@Stefa

Ten post edytował Babcia@Stefa 11.05.2008, 19:58:53


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
marcio
post 11.05.2008, 20:44:28
Post #3





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Zrob to na bazie albo na plikach a nie dajesz do zmiennej w skrypcie nie bedzie tak lepiej?


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Szunaj85
post 11.05.2008, 21:17:48
Post #4





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

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


Babcia@Stefa dziękuję za ekspresową odpowiedź. Masz u mnie plus. biggrin.gif
Faktycznie twój przykład działa i może warto przy tym zostać.
Chciałbym zapytać jak w tym przykładzie umieścić kilka tablic tak aby każda z nich wyświetlała swój własny komunikat.
Postaram się jaśniej:
Chodzi o skrypt, który odczytyłałby IP użytkownika, następnie przeszukiwałby tablicę i jak w pierwszej tablicy nie znalazłby liczby równej początku IP użytkownika przechodziłby do następnej tablicy, i takby szukał. I jeżeli w którejś
z kolei tablicy znalazłby liczbę równą początku adresu IP wykonywałby pewną czynność, przypisaną dokładnie tej tablicy. Gdy taki numer nie znajduje się w żadnej tablicy nic by nie robił albo zwracał false.
Sam też spróbuje wykonać ten wyżej wymieniony skrypt. Może się uda.

Ten post edytował Szunaj85 11.05.2008, 21:24:26


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
marcio
post 11.05.2008, 21:22:08
Post #5





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Nie rozumiem potrzeby dawac tego do kilku tablic

Najlatwiej to w sumie bedzie tak:
  1. <?php
  2. $ip = $_SERVER['REMOTE_ADDR'];
  3. $blocked = array('83', '88');
  4. $blocked2 = array('84', '89');
  5. $exp = explode('.', $ip);
  6. $exp2 = explode('.', $ip);
  7.  
  8. if(in_array($exp[0], $blocked) || in_array($exp2[0], $blocked2)) echo('Działa'); else echo('Twoje ip nie jest zablokowane');
  9. ?>


EDIT: chcesz aby kazda tablica miala swoj komunikat wiec dawaj if na kazda tablice napewno mozna to lepiej napisac ale tak bedzie chyba najlatwiej

Ten post edytował marcio 11.05.2008, 21:25:53


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Szunaj85
post 11.05.2008, 21:31:49
Post #6





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

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


Tak jak wyżej napisałem. Chodzi o to żeby każdy zbiór początkowych numerów adresów IP (każdy kraj) wykonywał inną czynność. Dlatego mówie o kilku tablicach.
Każda tablica to inny kraj.
Każda tablica wykonuje inną czynność. (np. każda tablica wyświetla inny komunikat).

Jednak mogę się mylić i jest inne zupełnie prostrze rozwiązanie. Oczywiście jestem otwarty na propozycje.

Ten post edytował Szunaj85 11.05.2008, 21:41:23


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
marcio
post 11.05.2008, 21:44:27
Post #7





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


No to napisalem ci jak bedzie najlatwiej zamiast
  1. <?php
  2. if(in_array($exp[0], $blocked) || in_array($exp2[0], $blocked2)) echo('Działa'); else echo('Twoje ip nie jest zablokowane');
  3. ?>

Daj
  1. <?php
  2. if(in_array($exp[0], $blocked)) echo('Działa'); else echo('Twoje ip nie jest zablokowane');
  3. if(in_array($exp2[0], $blocked2)) echo('Good'); else echo('Sorry your ip was banned');
  4. ?>

Czy jakos tak po angielsku nie wymiatam w nim biggrin.gif

Ten post edytował marcio 11.05.2008, 21:44:46


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Szunaj85
post 11.05.2008, 22:02:10
Post #8





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

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


O to właśnie chodziło! Kilka linijek kodu, a cieszy.
Dziękuję Ci marcio. Temat uważam za zamknięty.


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
Babcia@Stefa
post 12.05.2008, 20:21:52
Post #9





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 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


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
Szunaj85
post 15.05.2008, 12:58:56
Post #10





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

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


Zastanawiałem się czy odpisać bo problem teoretycznie został rozwiązany, ale po dłuższym namyśle postanowiłem to zrobić. Może ktoś ma inne rozwiązanie.
Chce zauważyć, że miło jest gdy ktoś tak dokładnie opisuje kod, który napisał. To bardzo ułatwia zielonym w PHP analizę jego zawartości. Myślę tu o Babcia@Stefa.
Jednak wracając do problemu chce zwrócić uwagę na kilka rzeczy.
Babcia@Stefa nie jestem pewien czy dokładnie przeczytałeś wszystkie posty. Wyżej dokładnie jest napisane na czym polega problem (starałem się opisać go zrozumiale i ze szczegółami).
Sprawdziłem twój skrypt i jak początek IP znajduje się w tablicy to wyświetla np.:
IP: xxx.xxx.xxx.xxx
Wiadomość: Neostrada

A jeżeli nie:
Twoje ip nie jest zablokowane
Oczywiście skrypt działa i może ktoś z niego skorzysta, jednak moje wymagania są trochę inne.
1. W moim przypadku jest potrzebna więcej niż jedna tablica - (każdej tablicy odpowiada np. inny komunikat) szczegóły są we wcześniejszych postach wyżej. Rozwiązanie mniej więcej coś na wzór marcio.
2. W moim przypadku nie jest potrzebne wyświetlanie adresu IP.
3. Piszecie o zabanowaniu lub zablokowaniu adreu IP. A ja wcale nie chcę nikogo banować ani blokować.
Ogólnie rzecz biorąc chodzi o porównanie adresu IP z tablicami i wyświetlenie np. komunikatu w zależności od tego
w jakiej tablicy znajduje się początek adresu IP.
Ale jeszcze raz! Szczegóły są we wcześniejszych postach wyżej. Mniej więcej coś na wzór marcio. W razie wątpiliwości pisać. biggrin.gif


Ten post edytował Szunaj85 15.05.2008, 13:23:40


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post
Babcia@Stefa
post 16.05.2008, 18:15:30
Post #11





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

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


Może napisz po co Ci te dwie tablice, być może nawet pomożemy Ci zintegrować ten kod (zapewne nie będzie to trudne)...

Rozwiązanie marcio'a nie jest wcale lepsze, a pozatym to są tylko instrukcje warunkowe.

Dziękuję, Babcia@Stefa


--------------------
Środowisko testowe (desktop) - Gedit, lighttpd, sftp, rsync, xfce4-terminal, chromium, firefox4 | System: Gentoo ~x86
O'Neill - serwer WWW @ lighttpd, links, nano, rsyncd, sftpd | System: Debian
Go to the top of the page
+Quote Post
marcio
post 16.05.2008, 19:55:06
Post #12





Grupa: Zarejestrowani
Postów: 2 291
Pomógł: 156
Dołączył: 23.09.2007
Skąd: ITALY-MILAN

Ostrzeżenie: (10%)
X----


Cytat
Rozwiązanie marcio'a nie jest wcale lepsze, a pozatym to są tylko instrukcje warunkowe

A co mo twoje rozwiazanie do tego tematu nastukales troche kodu i co??

Ogolnie @Szunaj85 moje rozwiazanie nie jest ani szybkie ani profesjonalne ale zrob cos na wzor tego co ci napisalem jak nie to pokombinuj bo nie wiem zabardzo jak ci pomoc


--------------------
Zainteresowania: XML | PHP | MY(SQL)| C# for .NET | PYTHON
http://code.google.com/p/form-builider/
Moj blog
Go to the top of the page
+Quote Post
Szunaj85
post 31.05.2008, 20:26:02
Post #13





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

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


Wcześniej tego nie dostrzegłem, ale chcąc wypełnić tablice numerami zauważyłem, że inne kraje też mają np. 83 na początku. To rujnuje mój plan, ponieważ nie mogę tak wykonać skryptu. Chciałem zapytać jak zlokalizować kraj z którego łączy się użytkownik na podstawie jego adresu ip. Może wystarczy coś takiego: xxx.xxx.xxx.xxx, a nie jak wcześniej sądziłem xxx.xxx.xxx.xxx. Sumując chcę być w stanie stwierdzić z jakiego kraju użytkownik połączył się z moją stroną odczytując jego adres ip i na tej podstawie wyświetlić odpowiedni komunikat (opierając się na powyższych skryptach). sadsmiley02.gif


--------------------
Jeśli Ci pomogłem wciśnij Jeśli mi pomożesz wcisnę
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 27.04.2024 - 05:05