Mercurial > SimpleWebPresenter
view FileCacheSet.inc @ 90:aafc23919e79
Validating errorPage.
| author | Tom Fredrik "BFG" Klaussen <bfg@blenning.no> |
|---|---|
| date | Wed, 17 Oct 2012 21:23:02 +0200 |
| parents | 1d5166aba2c5 |
| children | d98e315308cd |
line wrap: on
line source
<?php $baseDir = dirname(__FILE__); include_once 'Logger.inc'; $cache = ScriptIncludeCache::instance(__FILE__); $cache->cache_time("${baseDir}/Logger.inc"); /** * Caches a set of file with timestamps */ class FileCacheSet { private $newest = 0; private $files = array(); private $parentCaches = array(); /** * Constructs a FileCacheSet object * * @param $parent optional linked parent cache to sync with */ protected function __construct($parent = null) { if ($parent) { $this->addParent($parent); } } /** * Links up a parent cache * * @param $parent cache we should sync with */ protected function addParent($parent) { array_push($this->parentCaches, $parent); } /** * List a set of files which contributes to this pages cacheset. * * @param $humanReadable If the timestamp should be human readable. * * @return an associative array of file, and timestamp */ function cacheSet($humanReadable = False) { $retVal = array(); foreach ($this->parentCaches as $parent) { $retVal = array_merge($retVal, $parent->cacheSet($humanReadable)); } foreach($this->files as $file) { $mtime = filemtime($file); if ($humanReadable) $mtime = gmdate('D, d M Y H:i:s', $mtime) . ' GMT'; $retVal[$file] = $mtime; } return $retVal; } /** * Include a file in the cacheset * * @param $path the path of the file */ function cache_time($path) { if (!file_exists($path)) { Logger::warn("${path} does not exist"); errorPage("Resource is not available", 404); } array_push($this->files, $path); $mtime = filemtime($path); if ($mtime > $this->newest) { $this->newest = $mtime; } } /** * Find the newest member of the combined cacheset * * @return timestamp of newest member */ function getNewest() { $newest = 0; foreach ($this->parentCaches as $parent) { $newest = max($newest, $parent->getNewest()); } $newest = max($newest, $this->newest); return $newest; } } /** * Singleton class, keeps track of all scriptfile includes * * This class is typically used as a parent class of another cache */ class ScriptIncludeCache extends FileCacheSet { private static $myInstance = 0; protected function __construct($filename = False) { parent::__construct(); if ($filename) $this->cache_time($filename); $this->cache_time(__FILE__); } /** * Generates a singleton instance of this CacheTimeCheck * * @param $filename an optional file to include in the cacheset * * @return a CacheTimeCheck object */ function instance($filename = False) { if (! self::$myInstance) self::$myInstance = new self($filename); elseif ($filename) self::$myInstance->cache_time($filename); return self::$myInstance; } /** * Convenience function to include a file, and add it to the cacheset. * * @param $path path of the file * @param $basedir a directory to prepend to the path */ function includeOnce($path, $basedir = false) { if ($basedir) $path = $basedir . "/" . $path; $this->cache_time($path); include_once($path); } } ?>
