mirror of
https://github.com/phpbb/phpbb.git
synced 2025-06-28 14:18:52 +00:00
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
This commit is contained in:
parent
772cc44895
commit
2ada6c5380
5 changed files with 199 additions and 1 deletions
|
@ -139,6 +139,7 @@ define('ACL_USERS_TABLE', $table_prefix.'auth_users');
|
||||||
define('ATTACHMENTS_TABLE', $table_prefix.'attachments');
|
define('ATTACHMENTS_TABLE', $table_prefix.'attachments');
|
||||||
define('ATTACHMENTS_DESC_TABLE', $table_prefix.'attach_desc');
|
define('ATTACHMENTS_DESC_TABLE', $table_prefix.'attach_desc');
|
||||||
define('BANLIST_TABLE', $table_prefix.'banlist');
|
define('BANLIST_TABLE', $table_prefix.'banlist');
|
||||||
|
define('CACHE_TABLE', $table_prefix.'cache');
|
||||||
define('CONFIG_TABLE', $table_prefix.'config');
|
define('CONFIG_TABLE', $table_prefix.'config');
|
||||||
define('CONFIRM_TABLE', $table_prefix.'confirm');
|
define('CONFIRM_TABLE', $table_prefix.'confirm');
|
||||||
define('DISALLOW_TABLE', $table_prefix.'disallow'); //
|
define('DISALLOW_TABLE', $table_prefix.'disallow'); //
|
||||||
|
@ -188,9 +189,9 @@ set_error_handler('msg_handler');
|
||||||
// Instantiate some basic classes
|
// Instantiate some basic classes
|
||||||
$user = new user();
|
$user = new user();
|
||||||
$auth = new auth();
|
$auth = new auth();
|
||||||
$cache = new acm();
|
|
||||||
$template = new template();
|
$template = new template();
|
||||||
$db = new sql_db();
|
$db = new sql_db();
|
||||||
|
$cache = new acm($db);
|
||||||
|
|
||||||
// Connect to DB
|
// Connect to DB
|
||||||
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
|
$db->sql_connect($dbhost, $dbuser, $dbpasswd, $dbname, $dbport, false);
|
||||||
|
|
173
phpBB/includes/acm/acm_db.php
Normal file
173
phpBB/includes/acm/acm_db.php
Normal file
|
@ -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]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?>
|
|
@ -131,6 +131,14 @@ CREATE TRIGGER phpbb_banlist_trig
|
||||||
NEW.ban_id = GEN_ID(phpbb_banlist_gen, 1)|
|
NEW.ban_id = GEN_ID(phpbb_banlist_gen, 1)|
|
||||||
END;
|
END;
|
||||||
|
|
||||||
|
# Table: 'phpbb_cache'
|
||||||
|
CREATE TABLE phpbb_cache (
|
||||||
|
var_name VARCHAR(255) NOT NULL,
|
||||||
|
var_ts INTEGER DEFAULT 0 NOT NULL,
|
||||||
|
var_data TEXT DEFAULT '' NOT NULL,
|
||||||
|
PRIMARY KEY (var_name)
|
||||||
|
);
|
||||||
|
|
||||||
# Table: 'phpbb_config'
|
# Table: 'phpbb_config'
|
||||||
CREATE TABLE phpbb_config (
|
CREATE TABLE phpbb_config (
|
||||||
config_name VARCHAR(50) NOT NULL,
|
config_name VARCHAR(50) NOT NULL,
|
||||||
|
|
|
@ -88,6 +88,14 @@ CREATE TABLE phpbb_banlist (
|
||||||
PRIMARY KEY (ban_id)
|
PRIMARY KEY (ban_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
# Table: 'phpbb_cache'
|
||||||
|
CREATE TABLE phpbb_cache (
|
||||||
|
var_name varchar(255) DEFAULT '' NOT NULL,
|
||||||
|
var_ts int(10) UNSIGNED DEFAULT '0' NOT NULL,
|
||||||
|
var_data text NOT NULL,
|
||||||
|
PRIMARY KEY (var_name)
|
||||||
|
);
|
||||||
|
|
||||||
# Table: 'phpbb_config'
|
# Table: 'phpbb_config'
|
||||||
CREATE TABLE phpbb_config (
|
CREATE TABLE phpbb_config (
|
||||||
config_name varchar(255) NOT NULL,
|
config_name varchar(255) NOT NULL,
|
||||||
|
|
|
@ -78,6 +78,14 @@ CREATE TABLE phpbb_banlist (
|
||||||
PRIMARY KEY (ban_id)
|
PRIMARY KEY (ban_id)
|
||||||
);
|
);
|
||||||
|
|
||||||
|
-- Table: 'phpbb_cache'
|
||||||
|
CREATE TABLE phpbb_cache (
|
||||||
|
var_name VARCHAR(255) NOT NULL,
|
||||||
|
var_ts INTEGER DEFAULT 0 NOT NULL,
|
||||||
|
var_data TEXT DEFAULT '' NOT NULL,
|
||||||
|
PRIMARY KEY (var_name)
|
||||||
|
);
|
||||||
|
|
||||||
-- Table: 'phpbb_config'
|
-- Table: 'phpbb_config'
|
||||||
CREATE TABLE phpbb_config (
|
CREATE TABLE phpbb_config (
|
||||||
config_name VARCHAR(50) NOT NULL,
|
config_name VARCHAR(50) NOT NULL,
|
||||||
|
|
Loading…
Add table
Reference in a new issue