Skip to content
Snippets Groups Projects
Commit 0ac9a84d authored by oliver's avatar oliver
Browse files

http_conditionalRequest clean-up

darcs-hash:20060801041118-b3fbc-9240577694a28b3d4829a9c7ae1014f69d6422a9.gz
parent 4208c142
No related branches found
No related tags found
No related merge requests found
......@@ -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 :
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment