Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] zakres ip
Forum PHP.pl > Forum > PHP
rimk
No, właśnie.
Jak sprawdzić czy IP użytkownika mieści się w określonym zakresie numerów IP?
Jak zrobić to najszybciej?
dr_bonzo
A jak definiujesz zakres numerow IP?

123.*.12.34

czy

123.32.23.0/24 lub 123.32.23.0/255.255.255.0 ?
rimk
123.32.23.0-255.255.255.0
Darti
  1. <?php
  2. $d = range(1,254);
  3. $numer = explode('.',$ip);
  4. if(array_search($numer[3],$d)===false){
  5. echo "Masz niedobry IP";
  6. }
  7. ?>
rimk
Do: Darti
Odpowiedź nie temat. Chcę sprawdzać, czy podane IP mieści się w podanym w formacie 123.32.23.0-255.255.255.0 zakresie IP.
SongoQ
Zamieniasz na longa jest funkcja w php do tego, szukaj a jesli masz w postaci longa to chyba prosto uzyc ">"
maziorek
nie łatwiej wywalić wszystkie kropki i sprawdzać wielkość wyciągniętą z nr ip:

  1. <?php
  2.  
  3. function is_ip_range_vaild($zakres_od, $zakres_do) {
  4. $ip = $_SERVER['REMOTE_ADDR'];
  5. $ip_bez_kropek = str_replace('.', '', $ip);
  6. $zakres_od_bez_kropek = str_replace('.', '', $zakres_od);
  7. $zakres_do_bez_kropek = str_replace('.', '', $zakres_do);
  8. if($ip_bez_kropek >= $zakres_od_bez_kropek && $ip_bez_kropek <= $zakres_do_bez_kropek)
  9. { return true; } else { return false; }
  10. }
  11.  
  12. if(!is_ip_range_vaild('123.32.23.0', '255.255.255.0')) {
  13. echo "Masz niedobry IP";
  14. } else {
  15. // wykonujesz dalej...
  16. }
  17.  
  18. ?>


? nie sprawdzałem (pisane "na ciepło") ale powinno działać winksmiley.jpg
dr_bonzo
tja

mam ip

14.21.31.41

a sprawdzam czy ip sa miedzy
14.1.1.1-14.30.1.1

i co?
14213141 - jednak jest poza rzpedzialem

(14111; 143011)
maziorek
no sorry, moja wina winksmiley.jpg nie rozpatrzyłem tego przypadku. w ramach rekompensaty macie dobry kod smile.gif

  1. <?php
  2.  
  3. function is_ip_range_vaild($zakres_od, $zakres_do) {
  4. $ip = $_SERVER['REMOTE_ADDR'];
  5. $long = ip2long($ip);
  6.  
  7. if($long >= ip2long($zakres_od) && $long <= ip2long($zakres_do))
  8. { return true; } else { return false; }
  9.  
  10. }
  11. if(!is_ip_range_vaild('127.0.0.0', '127.0.0.2')) {
  12. echo "Masz niedobre IP!";
  13. } else {
  14. echo "Masz dobre IP!";
  15. }
  16.  
  17. ?>
camillos
Jeśli chcesz to zrobić bardziej elegancko i do wykorzystania np z mysql to polecam przekształcić numer ip na konkretną liczbę, a robi się to tak:
  1. <?php
  2. $r=explode('.',$ip);
  3. $ipnum = 16777216*$r[0] + 65536*$r[1] + 256*$r[2] + $r[3];
  4. ?>

jeśli masz inetnum, to rozbijasz oba numery początkowy i końcowy, przeliczasz na cyfry i masz już prościznę, aby sprawdzić czy twój (przeliczony) nr ip jest mniejszy od końcowego i większy od poczatkowego.
Oczywiście, gdy będziesz np konstruował tabelę w mysql to polecam typ kolumn INT (UNSIGNED) - ten atrybut ważny, bo wiele numerów nie zmieściłoby się w zwykłym INT signed.
w druga stronę cyfrę na ip zamienia poniższa funkcja
  1. <?php
  2. FUNCTION renum_ipnum($ipnum1)
  3. {
  4. $ip0= (integer) ($ipnum1/16777216);
  5. $ip1= (integer) (($ipnum1-($ip0*16777216))/65536);
  6. $ip2= (integer) (($ipnum1-(($ip0*16777216)+($ip1*65536)))/256);
  7. $ip3= $ipnum1 -(($ip0*16777216)+($ip1*65536)+($ip2*256));
  8. $ip= "$ip0.$ip1.$ip2.$ip3";
  9. return $ip;
  10. }
  11. ?>
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.