diff options
author | oliver <oliver@samera.com.py> | 2006-08-01 06:11:18 +0200 |
---|---|---|
committer | oliver <oliver@samera.com.py> | 2006-08-01 06:11:18 +0200 |
commit | 0ac9a84dcc53c93e18989f5720236f75005dd09d (patch) | |
tree | 13820d06fed69f7b7236ccac011d48a9e2bb8c90 | |
parent | 4208c142a46f3dc4e354b42c8ddabbc697f7963f (diff) | |
download | rpg-0ac9a84dcc53c93e18989f5720236f75005dd09d.tar.gz rpg-0ac9a84dcc53c93e18989f5720236f75005dd09d.tar.bz2 |
http_conditionalRequest clean-up
darcs-hash:20060801041118-b3fbc-9240577694a28b3d4829a9c7ae1014f69d6422a9.gz
-rw-r--r-- | inc/pageutils.php | 69 |
1 files changed, 40 insertions, 29 deletions
diff --git a/inc/pageutils.php b/inc/pageutils.php index 4814a7caf..a478ecd3a 100644 --- a/inc/pageutils.php +++ b/inc/pageutils.php @@ -398,37 +398,48 @@ function isVisiblePage($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 + * @author Simon Willison <swillison@gmail.com> + * @link http://simon.incutio.com/archive/2003/04/23/conditionalGet + * @param timestamp $timestamp lastmodified time of the cache file + * @returns void or void with previously header() commands executed */ 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; + // 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 (isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])){ + $if_modified_since = stripslashes($_SERVER['HTTP_IF_MODIFIED_SINCE']); + }else{ + $if_modified_since = false; + } + + if (isset($_SERVER['HTTP_IF_NONE_MATCH'])){ + $if_none_match = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']); + }else{ + $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 : |