Server IP : 1.179.227.78 / Your IP : 10.104.4.41 Web Server : Apache System : Linux afdc-mdu34 5.4.0-153-generic #170-Ubuntu SMP Fri Jun 16 13:43:31 UTC 2023 x86_64 User : www ( 1001) PHP Version : 7.4.30 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : /www/wwwroot/afdc-mdu34.rtarf.mi.th/mdu34/plugins/system/cache/ |
Upload File : |
<?php /** * @package Joomla.Plugin * @subpackage System.cache * * @copyright Copyright (C) 2005 - 2018 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ defined('_JEXEC') or die; /** * Joomla! Page Cache Plugin. * * @since 1.5 */ class PlgSystemCache extends JPlugin { /** * Cache instance. * * @var JCache * @since 1.5 */ public $_cache; /** * Cache key * * @var string * @since 3.0 */ public $_cache_key; /** * Application object. * * @var JApplicationCms * @since 3.8.0 */ protected $app; /** * Constructor. * * @param object &$subject The object to observe. * @param array $config An optional associative array of configuration settings. * * @since 1.5 */ public function __construct(& $subject, $config) { parent::__construct($subject, $config); // Set the language in the class. $options = array( 'defaultgroup' => 'page', 'browsercache' => $this->params->get('browsercache', 0), 'caching' => false, ); // Get the application if not done by JPlugin. This may happen during upgrades from Joomla 2.5. if (!$this->app) { $this->app = JFactory::getApplication(); } $this->_cache = JCache::getInstance('page', $options); } /** * Get a cache key for the current page based on the url and possible other factors. * * @return string * * @since 3.7 */ protected function getCacheKey() { static $key; if (!$key) { JPluginHelper::importPlugin('pagecache'); $parts = JEventDispatcher::getInstance()->trigger('onPageCacheGetKey'); $parts[] = JUri::getInstance()->toString(); $key = md5(serialize($parts)); } return $key; } /** * Converting the site URL to fit to the HTTP request. * * @return void * * @since 1.5 */ public function onAfterInitialise() { $app = $this->app; $user = JFactory::getUser(); if ($app->isClient('administrator')) { return; } if (count($app->getMessageQueue())) { return; } // If any pagecache plugins return false for onPageCacheSetCaching, do not use the cache. JPluginHelper::importPlugin('pagecache'); $results = JEventDispatcher::getInstance()->trigger('onPageCacheSetCaching'); $caching = !in_array(false, $results, true); if ($caching && $user->get('guest') && $app->input->getMethod() == 'GET') { $this->_cache->setCaching(true); } $data = $this->_cache->get($this->getCacheKey()); if ($data !== false) { // Set cached body. $app->setBody($data); echo $app->toString(); if (JDEBUG) { JProfiler::getInstance('Application')->mark('afterCache'); } $app->close(); } } /** * After render. * * @return void * * @since 1.5 */ public function onAfterRespond() { $app = $this->app; if ($app->isClient('administrator')) { return; } if (count($app->getMessageQueue())) { return; } $user = JFactory::getUser(); if ($user->get('guest') && !$this->isExcluded()) { // We need to check again here, because auto-login plugins have not been fired before the first aid check. $this->_cache->store(null, $this->getCacheKey()); } } /** * Check if the page is excluded from the cache or not. * * @return boolean True if the page is excluded else false * * @since 3.5 */ protected function isExcluded() { // Check if menu items have been excluded if ($exclusions = $this->params->get('exclude_menu_items', array())) { // Get the current menu item $active = $this->app->getMenu()->getActive(); if ($active && $active->id && in_array((int) $active->id, (array) $exclusions)) { return true; } } // Check if regular expressions are being used if ($exclusions = $this->params->get('exclude', '')) { // Normalize line endings $exclusions = str_replace(array("\r\n", "\r"), "\n", $exclusions); // Split them $exclusions = explode("\n", $exclusions); // Get current path to match against $path = JUri::getInstance()->toString(array('path', 'query', 'fragment')); // Loop through each pattern if ($exclusions) { foreach ($exclusions as $exclusion) { // Make sure the exclusion has some content if ($exclusion !== '') { if (preg_match('/' . $exclusion . '/is', $path, $match)) { return true; } } } } } // If any pagecache plugins return true for onPageCacheIsExcluded, exclude. JPluginHelper::importPlugin('pagecache'); $results = JEventDispatcher::getInstance()->trigger('onPageCacheIsExcluded'); if (in_array(true, $results, true)) { return true; } return false; } }