Pastie now auto-senses if line-wrap is a bad or good idea. Feedback?
## mark a section (Learn more)
function binary_search($fp, $min, $max, $ip) { if($min == $max) return false; $middle = floor(($min+$max) / 2); fseek($fp, 21 * $middle); $record = fscanf($fp, "%4x%4x\t%4x%4x\t%s\n"); $range_min = ($record[0] << 16) + $record[1]; $range_max = ($record[2] << 16) + $record[3]; $country = $record[4]; if($ip < $range_min) return binary_search($fp, $min, $middle, $ip); else if($range_max < $ip) return binary_search($fp, $middle+1, $max, $ip); return $country; } function find_ip($ip) { if($fp = fopen(IP_DB_FILE, 'r')) { $tmp = split('\.', $ip); $ip = ($tmp[0] << 24) + ($tmp[1] << 16) + ($tmp[2] << 8) + ($tmp[3]); $stat = fstat($fp); $res = binary_search($fp, 0, $stat['size'] / 21, $ip); fclose($fp); } else { echo "Couldn’t open " . IP_DB_FILE; } return $res; }
This paste will be private.
From the Design Piracy series on my blog: