protected static function rewrite() { // only should be run once per page load if (self::$is_cf !== NULL) { return; } // Set this based on the presence of the header, so it is true even if IP has already been rewritten self::$is_cf = isset($_SERVER["HTTP_CF_CONNECTING_IP"]) ? TRUE : FALSE; // Store original remote address in $original_ip self::$original_ip = isset($_SERVER["REMOTE_ADDR"]) ? $_SERVER["REMOTE_ADDR"] : FALSE; // Process original_ip if on cloudflare if (self::$is_cf && self::$original_ip) { // Check for IPv4 v. IPv6 if (strpos(self::$original_ip, ":") === FALSE) { foreach (self::$cf_ipv4 as $range) { if (IpRange::ipv4_in_range(self::$original_ip, $range)) { if (self::$is_cf) { self::$rewritten_ip = $_SERVER["REMOTE_ADDR"] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } break; } } } else { $ipv6 = IpRange::get_ipv6_full(self::$original_ip); foreach (self::$cf_ipv6 as $range) { if (IpRange::ipv6_in_range($ipv6, $range)) { if (self::$is_cf) { self::$rewritten_ip = $_SERVER["REMOTE_ADDR"] = $_SERVER["HTTP_CF_CONNECTING_IP"]; } break; } } } } }