Я хочу преобразовать префикс cidr (например, /28) в сетевую маску (например, 255.255.255.240) и не нашел для этого функции, существует ли она в php? Если нет, то как мне это сделать?
Префикс php cidr для сетевой маски
comment
Это примитивная математика. Может быть легко реализован за несколько минут.
- person zerkms   schedule 19.04.2011
comment
Кстати, stackoverflow. ком/вопросы/4931721/
- person zerkms   schedule 19.04.2011
comment
НВМ, понял: понял! $cidr_mask = 24; $бин = ''; for($i=1;$i‹=32;$i++) { $bin .= $cidr_mask ›= $i ? «1»: «0»; } $netmask = bindec($bin); эхо long2ip($netmask);
- person phpnoobipv4   schedule 19.04.2011
Ответы (2)
Пример 1:
функция cidr2NetmaskAddr()
function cidr2NetmaskAddr ($cidr) {
$ta = substr ($cidr, strpos ($cidr, '/') + 1) * 1;
$netmask = str_split (str_pad (str_pad ('', $ta, '1'), 32, '0'), 8);
foreach ($netmask as &$element)
$element = bindec ($element);
return join ('.', $netmask);
}
Использование
echo cidr2NetmaskAddr ('194.234.213.0/28');
Вывод
255.255.255.240
Пример 2.
функция createNetmaskAddr()
function createNetmaskAddr ($bitcount) {
$netmask = str_split (str_pad (str_pad ('', $bitcount, '1'), 32, '0'), 8);
foreach ($netmask as &$element)
$element = bindec ($element);
return join ('.', $netmask);
}
Использование
echo createNetmaskAddr (28);
Вывод
255.255.255.240
person
Wh1T3h4Ck5
schedule
19.04.2011