summaryrefslogtreecommitdiff
path: root/inc/pageutils.php
diff options
context:
space:
mode:
authoroliver <oliver@samera.com.py>2006-08-01 06:11:18 +0200
committeroliver <oliver@samera.com.py>2006-08-01 06:11:18 +0200
commit0ac9a84dcc53c93e18989f5720236f75005dd09d (patch)
tree13820d06fed69f7b7236ccac011d48a9e2bb8c90 /inc/pageutils.php
parent4208c142a46f3dc4e354b42c8ddabbc697f7963f (diff)
downloadrpg-0ac9a84dcc53c93e18989f5720236f75005dd09d.tar.gz
rpg-0ac9a84dcc53c93e18989f5720236f75005dd09d.tar.bz2
http_conditionalRequest clean-up
darcs-hash:20060801041118-b3fbc-9240577694a28b3d4829a9c7ae1014f69d6422a9.gz
Diffstat (limited to 'inc/pageutils.php')
-rw-r--r--inc/pageutils.php69
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 :