개발-PHP

[함수] ip range to cidr list

WEBKIKIS 2016. 3. 30. 20:52
반응형

[함수] ip range to cidr list


php.net 에 댓글로 적혀있는 바이너리 문자열로 계산하는것을
멋있는(?) 비트연산으로 고쳤습니다.
이제 cidr list 를 효율적으로 인덱싱하는 것만 하면 되는데 누가 해주겠죠????????

License: BSD



function range2cidrlist($minip, $maxip) {
  $minip = ip2long($minip);
  $maxip = ip2long($maxip);
  $cidrs = array();
  while($minip <= $maxip) {
    $rbit = 1;
    $rseq = 0;
    $rno = $minip;
    while(($minip & $rbit) == 0) {
      $tno = $rno | $rbit;
      if($tno > $maxip) break;
      $rno = $tno;
      $rbit <<= 1;
      $rseq += 1;
    }
    $cidrs[] = array(long2ip($minip), 32 - $rseq);
    $minip = $rno + 1;
  }
  return $cidrs;
}


출처 phpschool

반응형