. # return our best guess at the url used to access this page, without the path or query string function this_url_sans_path() { if(strtolower($_SERVER['HTTPS']) == 'on' || strtolower($_SERVER['HTTPS']) == 'yes') { $url = 'https'; $expected_port = 443; } else { $url = 'http'; $expected_port = 80; } $url .= '://'; if($_SERVER['HTTP_HOST']) { $url .= $_SERVER['HTTP_HOST']; } else { $url .= $_SERVER['SERVER_NAME']; if($_SERVER['SERVER_PORT'] != $expected_port) { $url .= ':' . $_SERVER['SERVER_PORT']; } } return $url; } # just the hostname, no port number function this_host() { if($_SERVER['HTTP_HOST']) { $host = $_SERVER['HTTP_HOST']; $p = strpos($host, ':'); if($p) { $host = substr($host, 0, $p); } return $host; } else { return $_SERVER['SERVER_NAME']; } } # return our best guess at the url used to access this page function this_url() { $url = this_url_sans_path(); $url .= $_SERVER['REQUEST_URI']; return $url; } # sends an HTTP redirect # # $url can be: # 1) a full URL # 2) an absolute path # 3) a filename (you can pass a directory/file.html and such, but "../" prefix is not supported yet) function redirect($url, $status = '302 Moved Temporarily', $message = '') { if(!strpos($url, ':')) { while(substr($url, 0, 2) == './') { $url = substr($url, 2); } if(substr($url, 0, 1) == '/') { $url = this_url_sans_path() . $url; } else { $url = preg_replace('|/[^/]*$|', "/$url", this_url()); } } if(function_exists('session_save_messages')) { if(function_exists('atexit_now')) { atexit_now(); } session_save_messages(); } header("HTTP/1.0 $status"); header("Location: $url"); echo($message); exit(); } # output http headers to allow caching of this page forever function http_cache_forever($cache_control = 'public') { header('Last-Modified: '.gmdate('D, d M Y H:i:s', 5025) . ' GMT'); # long time ago header("Cache-Control: $cache_control"); header('Expires: ' . gmdate('D, d M Y H:i:s',time()+31536000) . ' GMT'); # rfc 2616 says not to go more than a year in the future } ?>