summaryrefslogtreecommitdiffstats
path: root/system
diff options
context:
space:
mode:
authorThor (atiredmachine) <thor@bandwidthbeta.com>2012-01-24 22:34:34 +0100
committerThor (atiredmachine) <thor@bandwidthbeta.com>2012-01-24 22:34:34 +0100
commitb2c077e1e359650b444d5dc73a8fa8b94f469425 (patch)
tree655f78af5771aea8a07ad39fc7c7af17a24d0087 /system
parent96db8f91c34c18119548cacc4692362f51e70407 (diff)
parentc8efb8033ae775a5c1c840f867def4e6253b3d9a (diff)
Merge branch 'feature/cache_with_http_headers' into develop
Diffstat (limited to 'system')
-rwxr-xr-xsystem/core/Output.php45
1 files changed, 43 insertions, 2 deletions
diff --git a/system/core/Output.php b/system/core/Output.php
index abd8a0ea9..1f214a0b3 100755
--- a/system/core/Output.php
+++ b/system/core/Output.php
@@ -466,6 +466,9 @@ class CI_Output {
@chmod($cache_path, FILE_WRITE_MODE);
log_message('debug', 'Cache file written: '.$cache_path);
+
+ // Send HTTP cache-control headers to browser to match file cache settings.
+ $this->set_cache_header($_SERVER['REQUEST_TIME'],$expire);
}
// --------------------------------------------------------------------
@@ -503,13 +506,22 @@ class CI_Output {
return FALSE;
}
- // Has the file expired? If so we'll delete it.
- if (time() >= trim(str_replace('TS--->', '', $match[1])) && is_really_writable($cache_path))
+ $last_modified = filemtime($cache_path);
+ $expire = trim(str_replace('TS--->', '', $match[1]));
+
+ // Has the file expired?
+ if ($_SERVER['REQUEST_TIME'] >= $expire && is_really_writable($cache_path))
{
+ // If so we'll delete it.
@unlink($filepath);
log_message('debug', 'Cache file has expired. File deleted.');
return FALSE;
}
+ else
+ {
+ // Or else send the HTTP cache control headers.
+ $this->set_cache_header($last_modified,$expire);
+ }
// Display the cache
$this->_display(str_replace($match[0], '', $cache));
@@ -517,6 +529,35 @@ class CI_Output {
return TRUE;
}
+
+ // --------------------------------------------------------------------
+ /**
+ * Set the HTTP headers to match the server-side file cache settings
+ * in order to reduce bandwidth.
+ *
+ * @param int timestamp of when the page was last modified
+ * @param int timestamp of when should the requested page expire from cache
+ * @return void
+ */
+ public function set_cache_header($last_modified,$expiration)
+ {
+ $max_age = $expiration - $_SERVER['REQUEST_TIME'];
+
+ if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) && ($last_modified <= strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE'])))
+ {
+ $this->set_status_header(304);
+ exit;
+ }
+ else
+ {
+ header('Pragma: public');
+ header('Cache-Control: max-age=' . $max_age . ', public');
+ header('Expires: '.gmdate('D, d M Y H:i:s', $expiration).' GMT');
+ header('Last-modified: '.gmdate('D, d M Y H:i:s', $last_modified).' GMT');
+ }
+ }
+
+
}
/* End of file Output.php */