Hello, I have a script that compares a visitors IP address against a file of known bad addresses but I'm getting this notice: Notice: Undefined offset: 3 (line 26 below) Can anyone see what I've done wrong? Perhaps this sub was not written correctly to begin with? Thank you, Jenni ----------------------------------------------------------- function validate_ip($ip_array, $cm) { $msg = ''; if (isset($cm['bad_ip_message'])) { $msg = $cm['bad_ip_message']; } if (@strpos( $cm['remote_ip'], ':' ) !== false) { return false; } // Skip IPv6 addresses (?). if (!is_array($ip_array)) { return false; } foreach ($ip_array as $banned_ip) { $banned_ip = trim($banned_ip); if ($banned_ip[0] === '#' || $banned_ip === '') { continue; } // Skip comments and blank lines. if ( @strpos( $banned_ip, '/' ) === false ) { if (ip2long($banned_ip) === ip2long($cm['remote_ip'])) { ban_message($msg); } if (substr($banned_ip, -1) == '0') { $banned_ip .= '/24'; // Create a CIDR if IP ends in '0'. } } if ( @strpos( $banned_ip, '/' ) !== false ) { // Get the base and the bits from the CIDR. list($base, $bits) = explode('/', $banned_ip); // Now split it up into it's classes. list($a, $b, $c, $d) = explode('.', $base); // Notice: Undefined offset: 3 // Now do some bit shifting/switching to convert to ints. $i = ($a << 24) + ($b << 16) + ($c << 8) + $d; $mask = $bits == 0 ? 0: (~0 << (32 - $bits)); // Here's our lowest int. $low = $i & $mask; // Here's our highest int. $high = $i | (~$mask & 0xFFFFFFFF); // Now split up the IP we're checking against into classes. list($a, $b, $c, $d) = explode('.', $cm['remote_ip']); // Now convert the IP we're checking against to an int. $check = ($a << 24) + ($b << 16) + ($c << 8) + $d; // If the IP is within the range, including highest/lowest values, // then it's within the CIDR range. if ($check >= $low && $check <= $high) { ban_message($msg); } } } return; } -- PHP General Mailing List (http://www.php.net/) To unsubscribe, visit: http://www.php.net/unsub.php