summaryrefslogtreecommitdiff
path: root/inc/pageutils.php
diff options
context:
space:
mode:
authorBen Coburn <btcoburn@silicodon.net>2006-03-15 07:45:06 +0100
committerBen Coburn <btcoburn@silicodon.net>2006-03-15 07:45:06 +0100
commit254e5c84cc0ef99f63ad829ef4abf3240d05ada6 (patch)
treeb909c4bc56cbec135fa25b795fb749c1a1d34322 /inc/pageutils.php
parentecd9af5a8cb603e0bf0cd5702686e38bd80c3c0d (diff)
downloadrpg-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.php36
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 :