....) */ function redirect($url, $exit = true, $rfc2616 = false) { if (headers_sent()) { return false; } $url = $this->absoluteURI($url); header('Location: '. $url); if ( $rfc2616 && isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] != 'HEAD') { printf('Redirecting to: %s.', $url, $url); } if ($exit) { exit; } return true; } /** * Absolute URI * * This function returns the absolute URI for the partial URL passed. * The current scheme (HTTP/HTTPS), host server, port, current script * location are used if necessary to resolve any relative URLs. * * Offsets potentially created by PATH_INFO are taken care of to resolve * relative URLs to the current script. * * You can choose a new protocol while resolving the URI. This is * particularly useful when redirecting a web browser using relative URIs * and to switch from HTTP to HTTPS, or vice-versa, at the same time. * * @author Philippe Jausions * @static * @access public * @return string The absolute URI. * @param string $url Absolute or relative URI the redirect should go to. * @param string $protocol Protocol to use when redirecting URIs. * @param integer $port A new port number. */ function absoluteURI($url = null, $protocol = null, $port = null) { // filter CR/LF $url = str_replace(array("\r", "\n"), ' ', $url); // Mess around with already absolute URIs if (preg_match('!^([a-z0-9]+)://!i', $url)) { if (empty($protocol) && empty($port)) { return $url; } if (!empty($protocol)) { $url = $protocol .':'. end($array = explode(':', $url, 2)); } if (!empty($port)) { $url = preg_replace('!^(([a-z0-9]+)://[^/:]+)(:[\d]+)?!i', '\1:'. $port, $url); } return $url; } $host = 'localhost'; if (!empty($_SERVER['HTTP_HOST'])) { list($host) = explode(':', $_SERVER['HTTP_HOST']); } elseif (!empty($_SERVER['SERVER_NAME'])) { list($host) = explode(':', $_SERVER['SERVER_NAME']); } if (empty($protocol)) { if (isset($_SERVER['HTTPS']) && !strcasecmp($_SERVER['HTTPS'], 'on')) { $protocol = 'https'; } else { $protocol = 'http'; } if (!isset($port) || $port != intval($port)) { $port = isset($_SERVER['SERVER_PORT']) ? $_SERVER['SERVER_PORT'] : 80; } } if ($protocol == 'http' && $port == 80) { unset($port); } if ($protocol == 'https' && $port == 443) { unset($port); } $server = $protocol .'://'. $host . (isset($port) ? ':'. $port : ''); if (!strlen($url)) { $url = isset($_SERVER['REQUEST_URI']) ? $_SERVER['REQUEST_URI'] : $_SERVER['PHP_SELF']; } if ($url{0} == '/') { return $server . $url; } // Check for PATH_INFO if (isset($_SERVER['PATH_INFO']) && strlen($_SERVER['PATH_INFO']) && $_SERVER['PHP_SELF'] != $_SERVER['PATH_INFO']) { $path = dirname(substr($_SERVER['PHP_SELF'], 0, -strlen($_SERVER['PATH_INFO']))); } else { $path = dirname($_SERVER['PHP_SELF']); } if (substr($path = strtr($path, '\\', '/'), -1) != '/') { $path .= '/'; } return $server . $path . $url; } } ?>