Commit b6b24c28 authored by Dries's avatar Dries

Applied patch by Natrak:

- page_header() now adds Last-Modified and ETag http headers.
- When running PHP as an Apache module page_header() will check the HTTP
  headers for conditional gets, and will only push the content when it
  fails. (Works for html and xml pages as they are all cached). Note:
  this is a PHP limitation, so until PHP makes it work for other web
  servers this won't work for them.
- Added created field to cache database to hold the timestamp when the
  cache was created.
- Changed cache_get() to return an object with ->data and ->created.
- Update forum and locale modules.
parent 56ac29fa
......@@ -105,6 +105,7 @@ CREATE TABLE cache (
cid varchar(255) NOT NULL default '',
data mediumtext,
expire int(11) NOT NULL default '0',
created int(11) NOT NULL default '0',
PRIMARY KEY (cid)
) TYPE=MyISAM;
......
......@@ -102,6 +102,7 @@ CREATE TABLE cache (
cid varchar(255) NOT NULL default '',
data text default '',
expire integer NOT NULL default '0',
created integer NOT NULL default '0',
PRIMARY KEY (cid)
);
......
......@@ -462,16 +462,17 @@ function format_size($size) {
}
function cache_get($key) {
$cache = db_fetch_object(db_query("SELECT data FROM cache WHERE cid = '%s'", $key));
return $cache->data ? $cache->data : 0;
$cache = db_fetch_object(db_query("SELECT data, created FROM cache WHERE cid = '%s'", $key));
$created = $cache->created;
return $cache->data ? $cache : 0;
}
function cache_set($cid, $data, $expire = 0) {
if (db_fetch_object(db_query("SELECT cid FROM cache WHERE cid = '%s'", $cid))) {
db_query("UPDATE cache SET data = '%s' WHERE cid = '%s'", $data, $cid);
db_query("UPDATE cache SET data = '%s', created = %d, expire = %d WHERE cid = '%s'", $data, time(), $expire, $cid);
}
else {
db_query("INSERT INTO cache (cid, data, expire) VALUES('%s', '%s', '%s')", $cid, $data, $expire);
db_query("INSERT INTO cache (cid, data, created, expire) VALUES('%s', '%s', %d, %d)", $cid, $data, time(), $expire);
}
}
......@@ -515,7 +516,7 @@ function page_get_cache() {
}
}
return $cache ? $cache : 0;
return $cache;
}
function format_interval($timestamp) {
......@@ -764,8 +765,18 @@ function page_header() {
}
if (variable_get("cache", 0)) {
if ($data = page_get_cache()) {
print $data;
if ($cache = page_get_cache()) {
$date = gmdate("D, d M Y H:i:s", $cache->created) ." GMT";
header("Last-Modified: $date");
header("ETag: \"$date\"");
if ($headers = getallheaders()) {
// NOTE: the above is an Apache-ism so for the time being we don't send 304 headers to IIS servers.
if ($headers["If-Modified-Since"] == $date && $headers["If-None-Match"] == "\"$date\"") {
header("HTTP/1.0 304 Not Modified");
exit();
}
}
print $cache->data;
exit();
}
}
......
......@@ -104,7 +104,7 @@ function forum_block($op = "list", $delta = 0) {
}
$blocks["subject"] = t("Forum topics");
$blocks["content"] = $content;
$blocks["content"] = $content->data;
}
}
......@@ -310,7 +310,7 @@ function forum_get_forums($tid = 0) {
$tid = 0;
}
$forums = unserialize(cache_get("forum:$tid"));
$forums = cache_get("forum:$tid");
if (!$forums) {
$forums = array();
......@@ -333,6 +333,7 @@ function forum_get_forums($tid = 0) {
}
if ($user->uid && $forums) {
$forums = unserialize($forums);
foreach (_forum_topics_read($user->uid) as $tid => $old) {
if ($forums[$tid]) {
$forums[$tid]->old_topics = $old;
......
......@@ -104,7 +104,7 @@ function forum_block($op = "list", $delta = 0) {
}
$blocks["subject"] = t("Forum topics");
$blocks["content"] = $content;
$blocks["content"] = $content->data;
}
}
......@@ -310,7 +310,7 @@ function forum_get_forums($tid = 0) {
$tid = 0;
}
$forums = unserialize(cache_get("forum:$tid"));
$forums = cache_get("forum:$tid");
if (!$forums) {
$forums = array();
......@@ -333,6 +333,7 @@ function forum_get_forums($tid = 0) {
}
if ($user->uid && $forums) {
$forums = unserialize($forums);
foreach (_forum_topics_read($user->uid) as $tid => $old) {
if ($forums[$tid]) {
$forums[$tid]->old_topics = $old;
......
......@@ -282,7 +282,10 @@ function locale($string) {
static $locale_t;
if (!isset($locale_t)) {
$locale_t = unserialize(cache_get("locale:$locale"));
$cache = cache_get("locale:$locale");
if ($cache) {
$locale_t = unserialize($cache->data);
}
}
if ($locale_t[$string] != "") {
......
......@@ -282,7 +282,10 @@ function locale($string) {
static $locale_t;
if (!isset($locale_t)) {
$locale_t = unserialize(cache_get("locale:$locale"));
$cache = cache_get("locale:$locale");
if ($cache) {
$locale_t = unserialize($cache->data);
}
}
if ($locale_t[$string] != "") {
......
......@@ -57,7 +57,8 @@
"2002-10-17" => "update_42",
"2002-10-26" => "update_43",
"2002-11-08" => "update_44",
"2002-11-20" => "update_45"
"2002-11-20" => "update_45",
"2002-12-10" => "update_46"
);
// Update functions
......@@ -636,6 +637,10 @@ function update_45() {
update_sql("ALTER TABLE page ADD description varchar(128) NOT NULL default ''");
}
function update_46() {
update_sql("ALTER TABLE cache ADD created int(11) NOT NULL default '0'");
}
function update_upgrade3() {
update_sql("INSERT INTO system VALUES ('archive.module','archive','module','',1)");
update_sql("INSERT INTO system VALUES ('block.module','block','module','',1)");
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment