Server IP : 80.87.202.40 / Your IP : 216.73.216.169 Web Server : Apache System : Linux rospirotorg.ru 5.14.0-539.el9.x86_64 #1 SMP PREEMPT_DYNAMIC Thu Dec 5 22:26:13 UTC 2024 x86_64 User : bitrix ( 600) PHP Version : 8.2.27 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /home/bitrix/ext_www/rospirotorg.ru/bitrix/modules/main/classes/general/ |
Upload File : |
<?php /** * Bitrix Framework * @package bitrix * @subpackage main * @copyright 2001-2023 Bitrix */ class CStackCacheEntry { var $entity = ""; var $id = ""; var $values = array(); var $len = 10; var $ttl = 3600; var $cleanGet = true; var $cleanSet = true; function __construct($entity, $length = 0, $ttl = 0) { $this->entity = $entity; if($length > 0) $this->len = intval($length); if($ttl > 0) $this->ttl = intval($ttl); } function SetLength($length) { if($length > 0) $this->len = intval($length); while(count($this->values) > $this->len) { $this->cleanSet = false; array_shift($this->values); } } function SetTTL($ttl) { if($ttl > 0) $this->ttl = intval($ttl); } function Load() { global $DB; $objCache = \Bitrix\Main\Data\Cache::createInstance(); if($objCache->InitCache($this->ttl, $this->entity, $DB->type."/".$this->entity, "stack_cache")) { $this->values = $objCache->GetVars(); $this->cleanGet = true; $this->cleanSet = true; } } function DeleteEntry($id) { if(array_key_exists($id, $this->values)) { unset($this->values[$id]); $this->cleanSet = false; } } function Clean() { global $DB; $objCache = \Bitrix\Main\Data\Cache::createInstance(); $objCache->Clean($this->entity, $DB->type."/".$this->entity, "stack_cache"); $this->values = array(); $this->cleanGet = true; $this->cleanSet = true; } function Get($id) { if(array_key_exists($id, $this->values)) { $result = $this->values[$id]; //Move accessed value to the top of list only when it is not at the top end($this->values); if(key($this->values) !== $id) { $this->cleanGet = false; unset($this->values[$id]); $this->values = $this->values + array($id => $result); } return $result; } else { return false; } } function Set($id, $value) { if(array_key_exists($id, $this->values)) { unset($this->values[$id]); $this->values = $this->values + array($id => $value); } else { $this->values = $this->values + array($id => $value); while(count($this->values) > $this->len) array_shift($this->values); } $this->cleanSet = false; } function Save() { if (defined("BITRIX_SKIP_STACK_CACHE") && BITRIX_SKIP_STACK_CACHE) return; global $DB; if( !$this->cleanSet || ( !$this->cleanGet && (count($this->values) >= $this->len) ) ) { $objCache = \Bitrix\Main\Data\Cache::createInstance(); //Force cache rewrite $objCache->forceRewriting(true); if($objCache->startDataCache($this->ttl, $this->entity, $DB->type."/".$this->entity, $this->values, "stack_cache")) { $objCache->endDataCache(); } $this->cleanGet = true; $this->cleanSet = true; } } }