1
0
mirror of https://github.com/phpbb/phpbb.git synced 2025-05-30 11:11:23 +02:00
v12mike 02234783c6
[ticket/15726] Implement selective purge in APCu cache driver
The current APCu cache driver implements a global clearing of the APCu
when the phpBB cache is purged. This is inappropriate if there are other
phpBB boards, or other php applications sharing the APCu cache.

This patch changes the behviour so that only cache entries matching
the key_prefix of this board are cleared by a phpBB cache purge.

The APCu unit test script has been updated to test this behaviour.
It has also been updated so that the test case can be run individually
previously it relied on initialisations made in other test scripts.

PHPBB3-15726
2018-09-16 16:05:22 +02:00

75 lines
1.4 KiB
PHP
Executable File

<?php
/**
*
* This file is part of the phpBB Forum Software package.
*
* @copyright (c) phpBB Limited <https://www.phpbb.com>
* @license GNU General Public License, version 2 (GPL-2.0)
*
* For full copyright and license information, please see
* the docs/CREDITS.txt file.
*
*/
namespace phpbb\cache\driver;
/**
* ACM for APCU
*/
class apcu extends \phpbb\cache\driver\memory
{
var $extension = 'apcu';
/**
* {@inheritDoc}
*/
function purge()
{
/* use an iterator to selectively clear our cache entries without
disturbing any other cache users
(e.g. other phpBB boards hosted on this server) */
apcu_delete(new \APCUIterator('#^' . $this->key_prefix . '#'));
parent::purge();
}
/**
* Fetch an item from the cache
*
* @access protected
* @param string $var Cache key
* @return mixed Cached data
*/
function _read($var)
{
return apcu_fetch($this->key_prefix . $var);
}
/**
* Store data in the cache
*
* @access protected
* @param string $var Cache key
* @param mixed $data Data to store
* @param int $ttl Time-to-live of cached data
* @return bool True if the operation succeeded
*/
function _write($var, $data, $ttl = 2592000)
{
return apcu_store($this->key_prefix . $var, $data, $ttl);
}
/**
* Remove an item from the cache
*
* @access protected
* @param string $var Cache key
* @return bool True if the operation succeeded
*/
function _delete($var)
{
return apcu_delete($this->key_prefix . $var);
}
}