edit file includes/class_datastore.php
at th end (above ?>)
add nether php code
PHP Code:
/**
* Class for fetching and initializing the vBulletin datastore from XCache
*
* @package vBulletin
* @version $Revision: $
* @date $Date: $
*/
class vB_Datastore_XCache extends vB_Datastore
{
/**
* Indicates if the result of a call to the register function should store the value in memory
*
* @var boolean
*/
var $store_result = false;
/**
* Fetches the contents of the datastore from XCache
*
* @param array Array of items to fetch from the datastore
*
* @return void
*/
function fetch($itemarray)
{
if (!function_exists('xcache_get'))
{
trigger_error('XCache not installed', E_USER_ERROR);
}
if (!ini_get('xcache.var_size'))
{
trigger_error('XCache variable data cache is not enabled, please set xcache.var_size in php.ini', E_USER_ERROR);
}
$db =& $this->dbobject;
$itemlist = array();
foreach ($this->defaultitems AS $item)
{
$this->do_fetch($item, $itemlist);
}
if (is_array($itemarray))
{
foreach ($itemarray AS $item)
{
$this->do_fetch($item, $itemlist);
}
}
$this->store_result = true;
// some of the items we are looking for were not found, lets get them in one go
if (!empty($itemlist))
{
$this->do_db_fetch(implode(',', $itemlist));
}
$this->check_options();
// set the version number variable
$this->registry->versionnumber =& $this->registry->options['templateversion'];
}
/**
* Fetches the data from shared memory and detects errors
*
* @param string title of the datastore item
* @param array A reference to an array of items that failed and need to fetched from the database
*
* @return boolean
*/
function do_fetch($title, &$itemlist)
{
$ptitle = $this->prefix . $title;
if (($data = xcache_get($ptitle)) === null)
{ // appears its not there, lets grab the data, and put it in
$itemlist[] = "'" . $this->dbobject->escape_string($title) . "'";
return false;
}
$this->register($title, $data);
return true;
}
/**
* Sorts the data returned from the cache and places it into appropriate places
*
* @param string The name of the data item to be processed
* @param mixed The data associated with the title
*
* @return void
*/
function register($title, $data)
{
if ($this->store_result === true)
{
$this->build($title, $data);
}
parent::register($title, $data);
}
/**
* Updates the appropriate cache file
*
* @param string title of the datastore item
* @param mixed The data associated with the title
*
* @return void
*/
function build($title, $data)
{
$ptitle = $this->prefix . $title;
xcache_unset($ptitle);
xcache_set($ptitle, $data);
}
}
// #############################################################################
and edit includes/config.php
add or edit
$config['Datastore']['class'] = 'vB_Datastore_XCache';
precondition:
you must install xcache,and set xcache.var_size not 0,same as xcache.size in php.ini