diff options
author | Ludovic Arnaud <ludovic_arnaud@users.sourceforge.net> | 2003-08-10 19:46:03 +0000 |
---|---|---|
committer | Ludovic Arnaud <ludovic_arnaud@users.sourceforge.net> | 2003-08-10 19:46:03 +0000 |
commit | 2ada6c5380b6cf999791bc1955e15570da475c17 (patch) | |
tree | 8f92b5b9aa9f93953cf26f81824566242832e46d /phpBB/includes/acm/acm_db.php | |
parent | 772cc44895610fb62ce118e119353eef3df7355d (diff) | |
download | forums-2ada6c5380b6cf999791bc1955e15570da475c17.tar forums-2ada6c5380b6cf999791bc1955e15570da475c17.tar.gz forums-2ada6c5380b6cf999791bc1955e15570da475c17.tar.bz2 forums-2ada6c5380b6cf999791bc1955e15570da475c17.tar.xz forums-2ada6c5380b6cf999791bc1955e15570da475c17.zip |
Added support for db-based caching... for people who like to store data in databases.
git-svn-id: file:///svn/phpbb/trunk@4368 89ea8834-ac86-4346-8a33-228a782c2dd0
Diffstat (limited to 'phpBB/includes/acm/acm_db.php')
-rw-r--r-- | phpBB/includes/acm/acm_db.php | 173 |
1 files changed, 173 insertions, 0 deletions
diff --git a/phpBB/includes/acm/acm_db.php b/phpBB/includes/acm/acm_db.php new file mode 100644 index 0000000000..08972c8d20 --- /dev/null +++ b/phpBB/includes/acm/acm_db.php @@ -0,0 +1,173 @@ +<?php +/*************************************************************************** + * acm_db.php + * ------------------- + * begin : Saturday, Feb 13, 2001 + * copyright : (C) 2001 The phpBB Group + * email : support@phpbb.com + * + * $Id$ + * + ***************************************************************************/ + +/*************************************************************************** + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 2 of the License, or + * (at your option) any later version. + * + ***************************************************************************/ + +class acm +{ + var $db; + var $is_modified = FALSE; + var $vars = ''; + var $sql_enabled = FALSE; + + function acm(&$db) + { + $this->db =& $db; + } + + function load($var_names = '') + { + $this->vars = array(); + + $sql = 'SELECT var_name, var_ts, var_data + FROM ' . CACHE_TABLE; + + if (!empty($var_names)) + { + $sql .= " WHERE var_name IN ('" . implode("', '", $var_names) . "')"; + } + + $result = $this->db->sql_query($sql); + + while ($row = $this->db->sql_fetchrow($result)) + { + $this->vars[$row['var_name']] = array( + 'data' => unserialize($row['var_data']), + 'ts' => intval($row['var_ts']) + ); + } + } + + function unload() + { + $this->save(); + unset($this->vars); + } + + function save() + { + if (!$this->is_modified) + { + return; + } + + $delete = $insert = array(); + foreach ($this->vars as $var_name => $var_ary) + { + if (!empty($var_ary['is_modified'])) + { + if (!empty($var_ary['delete'])) + { + $delete[] = $var_name; + } + else + { + $delete[] = $var_name; + $insert[] = "'$var_name', " . time() . ", '" . $this->db->sql_escape(serialize($var_ary['data'])) . "'"; + } + + $this->db->sql_query($sql); + } + } + + if (count($delete)) + { + $sql = 'DELETE FROM ' . CACHE_TABLE . " + WHERE var_name IN ('" . implode("', '", $delete) . "')"; + $this->db->sql_query($sql); + } + if (count($insert)) + { + switch (SQL_LAYER) + { + case 'mysql': + $sql = 'INSERT INTO ' . CACHE_TABLE . ' (var_name, var_ts, var_data) + VALUES (' . implode('), (', $insert) . ')'; + $this->db->sql_query($sql); + break; + + default: + foreach ($insert as $values) + { + $sql = 'INSERT INTO ' . CACHE_TABLE . " (var_name, var_ts, var_data) + VALUES ($values)"; + $this->db->sql_query($sql); + } + } + } + + $this->is_modified = FALSE; + } + + function tidy($max_age = 0) + { + $sql = 'DELETE FROM ' . CACHE_TABLE . ' + WHERE var_ts < ' . (time() - $max_age); + $this->db->sql_query($sql); + } + + function get($var_name, $max_age = 0) + { + return ($this->exists($var_name, $max_age)) ? $this->vars[$var_name]['data'] : NULL; + } + + function put($var_name, $var_data) + { + $this->vars[$var_name] = array( + 'data' => $var_data, + 'ts' => time(), + 'is_modified' => TRUE + ); + + $this->is_modified = TRUE; + } + + function destroy($var_name) + { + if (isset($this->vars[$var_name])) + { + $this->is_modified = TRUE; + + $this->vars[$var_name] = array( + 'is_modified' => TRUE, + 'delete' => TRUE + ); + } + } + + function exists($var_name, $max_age = 0) + { + if (!is_array($this->vars)) + { + $this->load(); + } + + if ($max_age > 0 && isset($this->vars[$var_name])) + { + if ($this->vars[$var_name]['ts'] + $max_age > time()) + { + $this->destroy($var_name); + return FALSE; + } + } + + return isset($this->vars[$var_name]); + } +} +?>
\ No newline at end of file |