php cidr前缀到netmask

php*_*pv4 6 php ipv4 cidr

我正在寻找将cidr前缀(例如/ 28)转换为网络掩码(例如255.255.255.240)并且没有为此定位函数,PHP中是否存在?如果没有,我该怎么做呢?

jon*_*von 9

我写了一个包含执行此操作的方法的.

function CIDRtoMask($int) {
    return long2ip(-1 << (32 - (int)$int));
}
Run Code Online (Sandbox Code Playgroud)

我在snipplr发布了全班.


Wh1*_*Ck5 5

示例#1:

function 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);

  }
Run Code Online (Sandbox Code Playgroud)

用法

  echo cidr2NetmaskAddr ('194.234.213.0/28');
Run Code Online (Sandbox Code Playgroud)

产量

255.255.255.240


示例#2:

function 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);

  }
Run Code Online (Sandbox Code Playgroud)

用法

  echo createNetmaskAddr (28);
Run Code Online (Sandbox Code Playgroud)

产量

255.255.255.240