1
그래서 같은 IP의 CIDR의 또는 단일 IP의 배열을 받아 아래의 기능을 가지고 기타사용자 정의 함수가 false를 반환해야하는 경우 true를 반환합니까?
$cidrs = array("127.0.0.1","65.87.43.65/32");
..
함수는 다음 주어진 IP가 잘 들어 있는지 여부를 확인IP 및 CIDR의 배열, CIDR에 있든 단일 IP로 지정 되든 상관 없습니다.
IP에 CIDR 마스크가 없으면 IP가 목록에 있는지에 관계없이 항상 true를 반환합니다.
적어도 한 번은 효과가 있었지만 다르게 작동하도록 변경 한 내용을 알지 못합니다.
기능은 다음과 같습니다 :
function testIP($user_ip, $cidrs)
{
$ipu = explode('.', $user_ip);
foreach ($ipu as &$v)
$v = str_pad(decbin($v), 8, '0', STR_PAD_LEFT);
$ipu = join('', $ipu);
$res = false;
foreach ($cidrs as $cidr)
{
$parts = explode('/', $cidr);
if (empty($parts))
{
if (in_array($user_ip, $cidrs))
{
$res = true;
break;
}
break;
}
$ipc = explode('.', $parts[0]);
foreach ($ipc as &$v) $v = str_pad(decbin($v), 8, '0', STR_PAD_LEFT);
$ipc = substr(join('', $ipc), 0, $parts[1]);
$ipux = substr($ipu, 0, $parts[1]);
$res = ($ipc === $ipux);
if ($res) break;
}
return $res;
}
나는 내 인생이 해결할 수없는 것이 더 이상 작업을하는 이유 -이 이상의 많은 시간이 손실되지 않았습니다!
일한 그, 감사합니다! 빈 배열을 반환 할 것이라고 말한대로 빈 함수를 사용하고 explode 함수의 문서에서 구분 기호 텍스트가 압축 텍스트에없는 경우 빈 배열이 반환됩니다. 어쨌든, 이것은 효과가있었습니다 - 정말 고마워요! –
편집했는데 다른 문제가 있습니다. –
두 번째 생각에, 어쩌면 그 휴식이 필요합니다. 흠. 나는 그것에 대해 생각해야만한다. –