diff options
author | Dries Buytaert <dries@buytaert.net> | 2002-12-11 22:00:04 +0000 |
---|---|---|
committer | Dries Buytaert <dries@buytaert.net> | 2002-12-11 22:00:04 +0000 |
commit | b6b24c28e046bbd0bddb9b2b65ca9d4bddff24c8 (patch) | |
tree | 8cb31a5aa7568084b9a785f8154f72a2b41fc419 | |
parent | 56ac29fad891078c20c06e3d5e1f29a045f65e13 (diff) | |
download | brdo-b6b24c28e046bbd0bddb9b2b65ca9d4bddff24c8.tar.gz brdo-b6b24c28e046bbd0bddb9b2b65ca9d4bddff24c8.tar.bz2 |
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.
-rw-r--r-- | database/database.mysql | 1 | ||||
-rw-r--r-- | database/database.pgsql | 1 | ||||
-rw-r--r-- | includes/common.inc | 25 | ||||
-rw-r--r-- | modules/forum.module | 5 | ||||
-rw-r--r-- | modules/forum/forum.module | 5 | ||||
-rw-r--r-- | modules/locale.module | 5 | ||||
-rw-r--r-- | modules/locale/locale.module | 5 | ||||
-rw-r--r-- | update.php | 7 |
8 files changed, 40 insertions, 14 deletions
diff --git a/database/database.mysql b/database/database.mysql index 672edd03b..3aaa2f113 100644 --- a/database/database.mysql +++ b/database/database.mysql @@ -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; diff --git a/database/database.pgsql b/database/database.pgsql index 780af6233..84eda045f 100644 --- a/database/database.pgsql +++ b/database/database.pgsql @@ -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) ); diff --git a/includes/common.inc b/includes/common.inc index a7e5164d2..9fd254497 100644 --- a/includes/common.inc +++ b/includes/common.inc @@ -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(); } } diff --git a/modules/forum.module b/modules/forum.module index cfe9dc4cd..7825f7eeb 100644 --- a/modules/forum.module +++ b/modules/forum.module @@ -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; diff --git a/modules/forum/forum.module b/modules/forum/forum.module index cfe9dc4cd..7825f7eeb 100644 --- a/modules/forum/forum.module +++ b/modules/forum/forum.module @@ -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; diff --git a/modules/locale.module b/modules/locale.module index a726fc6c3..8dfccad47 100644 --- a/modules/locale.module +++ b/modules/locale.module @@ -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] != "") { diff --git a/modules/locale/locale.module b/modules/locale/locale.module index a726fc6c3..8dfccad47 100644 --- a/modules/locale/locale.module +++ b/modules/locale/locale.module @@ -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] != "") { diff --git a/update.php b/update.php index 03761877a..608907404 100644 --- a/update.php +++ b/update.php @@ -57,7 +57,8 @@ $mysql_updates = array( "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)"); |