/** * Internal function to mask portions of the visitor IP address * * @param string $ip IP address in network address format * @param int $maskLength Number of octets to reset * @return string */ public static function applyIPMask($ip, $maskLength) { // IPv4 or mapped IPv4 in IPv6 if (IP::isIPv4($ip)) { $i = strlen($ip); if ($maskLength > $i) { $maskLength = $i; } while ($maskLength-- > 0) { $ip[--$i] = chr(0); } } else { $masks = array('ffff:ffff:ffff:ffff:ffff:ffff:ffff:ffff', 'ffff:ffff:ffff:ffff::', 'ffff:ffff:ffff:0000::', 'ffff:ff00:0000:0000::'); $ip = $ip & pack('a16', inet_pton($masks[$maskLength])); } return $ip; }