| Server IP : 213.186.33.4 / Your IP : 216.73.216.193 Web Server : Apache System : Linux webm006.cluster103.gra.hosting.ovh.net 5.15.206-ovh-vps-grsec-zfs-classid #1 SMP Fri May 15 02:41:25 UTC 2026 x86_64 User : awebpaca ( 35430) PHP Version : 8.5.0 Disable Function : _dyuweyrj4,_dyuweyrj4r,dl MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : ON | Sudo : OFF | Pkexec : OFF Directory : /home/a/w/e/awebpaca/piwik/vendor/matomo/cache/src/Backend/ |
Upload File : |
<?php
/**
* Matomo - free/libre analytics platform
*
* @link https://matomo.org
* @license http://www.gnu.org/licenses/lgpl-3.0.html LGPL v3 or later
*
*/
namespace Matomo\Cache\Backend;
use Matomo\Cache\Backend;
/**
* TODO: extend Doctrine ChainCache as soon as available
*/
class Chained implements Backend
{
/**
* @var Backend[]
*/
private $backends = array();
/**
* Initializes the chained backend.
*
* @param Backend[] $backends An array of backends to use. They should be ordered from fastest to slowest.
*/
public function __construct($backends = array())
{
$this->backends = array_values($backends);
}
public function getBackends()
{
return $this->backends;
}
public function doFetch($id)
{
foreach ($this->backends as $key => $backend) {
$value = $backend->doFetch($id);
if ($value !== false) {
// EG If chain is ARRAY => REDIS => DB and we find result in DB we will update REDIS and ARRAY
for ($subKey = $key - 1 ; $subKey >= 0 ; $subKey--) {
$this->backends[$subKey]->doSave($id, $value, 300); // TODO we should use the actual TTL here
}
return $value;
}
}
return false;
}
public function doContains($id)
{
foreach ($this->backends as $backend) {
if ($backend->doContains($id)) {
return true;
}
}
return false;
}
public function doSave($id, $data, $lifeTime = 0)
{
$stored = true;
foreach ($this->backends as $backend) {
$stored = $backend->doSave($id, $data, $lifeTime) && $stored;
}
return $stored;
}
// returns true even when file does not exist
public function doDelete($id)
{
foreach ($this->backends as $backend) {
if ($backend->doContains($id)) {
$backend->doDelete($id);
}
}
return true;
}
public function doFlush()
{
$flushed = true;
foreach ($this->backends as $backend) {
$flushed = $backend->doFlush() && $flushed;
}
return $flushed;
}
}