diff options
author | Ben Coburn <btcoburn@silicodon.net> | 2006-03-15 07:45:06 +0100 |
---|---|---|
committer | Ben Coburn <btcoburn@silicodon.net> | 2006-03-15 07:45:06 +0100 |
commit | 254e5c84cc0ef99f63ad829ef4abf3240d05ada6 (patch) | |
tree | b909c4bc56cbec135fa25b795fb749c1a1d34322 /inc/pageutils.php | |
parent | ecd9af5a8cb603e0bf0cd5702686e38bd80c3c0d (diff) | |
download | rpg-254e5c84cc0ef99f63ad829ef4abf3240d05ada6.tar.gz rpg-254e5c84cc0ef99f63ad829ef4abf3240d05ada6.tar.bz2 |
refactored http_conditionalRequest($timestamp) to inc/pageutils.php
darcs-hash:20060315064506-05dcb-92833a95f37a43ef50e6b993930ac9d25caed81f.gz
Diffstat (limited to 'inc/pageutils.php')
-rw-r--r-- | inc/pageutils.php | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/inc/pageutils.php b/inc/pageutils.php index 2a07b5fe6..0689ff6fe 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -330,4 +330,40 @@ function isVisiblePage($id){ return !isHiddenPage($id); } +/** + * Checks and sets HTTP headers for conditional HTTP requests + * + * @author Simon Willison <swillison@gmail.com> + * @link http://simon.incutio.com/archive/2003/04/23/conditionalGet + */ +function http_conditionalRequest($timestamp){ + // A PHP implementation of conditional get, see + // http://fishbowl.pastiche.org/archives/001132.html + $last_modified = substr(date('r', $timestamp), 0, -5).'GMT'; + $etag = '"'.md5($last_modified).'"'; + // Send the headers + header("Last-Modified: $last_modified"); + header("ETag: $etag"); + // See if the client has provided the required headers + $if_modified_since = isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) ? + stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']) : + false; + $if_none_match = isset($_SERVER['HTTP_IF_NONE_MATCH']) ? + stripslashes($_SERVER['HTTP_IF_NONE_MATCH']) : + false; + if (!$if_modified_since && !$if_none_match) { + return; + } + // At least one of the headers is there - check them + if ($if_none_match && $if_none_match != $etag) { + return; // etag is there but doesn't match + } + if ($if_modified_since && $if_modified_since != $last_modified) { + return; // if-modified-since is there but doesn't match + } + // Nothing has changed since their last request - serve a 304 and exit + header('HTTP/1.0 304 Not Modified'); + exit; +} + //Setup VIM: ex: et ts=2 enc=utf-8 : |