`<?php
function ipToLong($network)
{   $networkLong = '';
    if(filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)){
        $networkLong=base_convert(sprintf("%u",ip2long($network)), 10, 2);
    }else{
        $networkPack = inet_pton($network);
    $bits = 15;
    while ($bits >= 0) {
        $bin = sprintf("%08b", (ord($networkPack[$bits])));
        $networkLong = $bin.$networkLong;
        $bits--;
    }
}
    return $networkLong;
}
/获取网络地址/
function getSegment($network,$mask){
    if(filter_var($network, FILTER_VALIDATE_IP, FILTER_FLAG_IPV4)){
        $ipv4Long=ipToLong($network);
        $maskLong=str_pad(str_repeat(1, $mask), 32, 0);
        $segment=$ipv4Long & $maskLong;
        return $segment;
    }else{
        $ipv6Long=ipToLong($network);
        $maskLong=str_pad(str_repeat(1, $mask), 128, 0);
        $segment=$ipv6Long & $maskLong;
        return $segment;
    }
}
echo ipToLong('106.32.59.244');
echo '
';
echo getSegment('106.32.59.244','29');
?> `
上面计算出来的网络地址就是106.32.59.244,为什么和下图计算出来的不一致呢?

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
因为和你机器是32位还是64位有关系~