7

cidr プレフィックス (例: /28) をネットマスク (例: 255.255.255.240) に変換しようとしていますが、このための関数が見つかりませんでした。php に存在しますか? そうでない場合、どうすればこれを行うことができますか?

4

2 に答える 2

12

これを行うメソッドを含むクラスを作成しました。

function CIDRtoMask($int) {
    return long2ip(-1 << (32 - (int)$int));
}

クラス全体をgistとして投稿しました。

于 2011-05-02T12:34:34.440 に答える
6

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

于 2011-04-19T02:50:22.497 に答える