Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: CIDR
 
 автор: Sega   (05.07.2009 в 23:43)   письмо автору
 
 

Нашёл в сети такой код:
<?php
function netMatch ($CIDR,$IP) { 
    list (
$net$mask) = explode ('/'$CIDR); 
    return ( 
ip2long ($IP) & ~((<< (32 $mask)) - 1) ) == ip2long ($net); 
}  
var_dump(netMatch('127.0.0.0/16','127.0.0.51')); 

для проверки принадлежности множеству адресов, порождаемого CIDR-методом (может заумно сказал, но смысл, наверное, ясен).

Я вот не уверен, что код правильный! Меня смущает, что в правой части равенства просто ip2long ($net), то есть мы не "эндим" это число с маской подсети. Может я не совсем точно понимаю смысл IP-адреса слева от слеша: 127.0.0.0/16. Мне кажется, что это любой адрес из этого же множества. Кто не прав?

  Ответить  
 
 автор: .   (06.07.2009 в 00:08)
 
   для: Sega   (05.07.2009 в 23:43)
 

Это начальный адрес, а не любой. У него всегда будут нули на конце (в двоичном виде), поэтому "эндить" не имеет смысла.

  Ответить  
 
 автор: Trianon   (06.07.2009 в 00:50)   письмо автору
 
   для: Sega   (05.07.2009 в 23:43)
 

Только адрес сети.
Хотите ставить любой - добавляйте & в правую часть.

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования