lite.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 756 行 · 第 1/2 页
PHP
756 行
<?php/*** Fast, light and safe Cache Class** Cache_Lite is a fast, light and safe cache system. It's optimized* for file containers. It is fast and safe (because it uses file* locking and/or anti-corruption tests).** There are some examples in the 'docs/examples' file* Technical choices are described in the 'docs/technical' file** Memory Caching is from an original idea of* Mike BENOIT <ipso@snappymail.ca>** Nota : A chinese documentation (thanks to RainX <china_1982@163.com>) is* available at :* http://rainx.phpmore.com/manual/cache_lite.html** @package Cache_Lite* @category Caching* @version $Id: Lite.php,v 1.30 2005/06/13 20:50:48 fab Exp $* @author Fabien MARTY <fab@php.net>*/define('CACHE_LITE_ERROR_RETURN', 1);define('CACHE_LITE_ERROR_DIE', 8);class Cache_Lite{ // --- Private properties --- /** * Directory where to put the cache files * (make sure to add a trailing slash) * * @var string $_cacheDir */ var $_cacheDir = '/tmp/'; /** * Enable / disable caching * * (can be very usefull for the debug of cached scripts) * * @var boolean $_caching */ var $_caching = true; /** * Cache lifetime (in seconds) * * @var int $_lifeTime */ var $_lifeTime = 3600; /** * Enable / disable fileLocking * * (can avoid cache corruption under bad circumstances) * * @var boolean $_fileLocking */ var $_fileLocking = true; /** * Timestamp of the last valid cache * * @var int $_refreshTime */ var $_refreshTime; /** * File name (with path) * * @var string $_file */ var $_file; /** * File name (without path) * * @var string $_fileName */ var $_fileName; /** * Enable / disable write control (the cache is read just after writing to detect corrupt entries) * * Enable write control will lightly slow the cache writing but not the cache reading * Write control can detect some corrupt cache files but maybe it's not a perfect control * * @var boolean $_writeControl */ var $_writeControl = true; /** * Enable / disable read control * * If enabled, a control key is embeded in cache file and this key is compared with the one * calculated after the reading. * * @var boolean $_writeControl */ var $_readControl = true; /** * Type of read control (only if read control is enabled) * * Available values are : * 'md5' for a md5 hash control (best but slowest) * 'crc32' for a crc32 hash control (lightly less safe but faster, better choice) * 'strlen' for a length only test (fastest) * * @var boolean $_readControlType */ var $_readControlType = 'crc32'; /** * Pear error mode (when raiseError is called) * * (see PEAR doc) * * @see setToDebug() * @var int $_pearErrorMode */ var $_pearErrorMode = CACHE_LITE_ERROR_RETURN; /** * Current cache id * * @var string $_id */ var $_id; /** * Current cache group * * @var string $_group */ var $_group; /** * Enable / Disable "Memory Caching" * * NB : There is no lifetime for memory caching ! * * @var boolean $_memoryCaching */ var $_memoryCaching = false; /** * Enable / Disable "Only Memory Caching" * (be carefull, memory caching is "beta quality") * * @var boolean $_onlyMemoryCaching */ var $_onlyMemoryCaching = false; /** * Memory caching array * * @var array $_memoryCachingArray */ var $_memoryCachingArray = array(); /** * Memory caching counter * * @var int $memoryCachingCounter */ var $_memoryCachingCounter = 0; /** * Memory caching limit * * @var int $memoryCachingLimit */ var $_memoryCachingLimit = 1000; /** * File Name protection * * if set to true, you can use any cache id or group name * if set to false, it can be faster but cache ids and group names * will be used directly in cache file names so be carefull with * special characters... * * @var boolean $fileNameProtection */ var $_fileNameProtection = true; /** * Enable / disable automatic serialization * * it can be used to save directly datas which aren't strings * (but it's slower) * * @var boolean $_serialize */ var $_automaticSerialization = false; /** * Disable / Tune the automatic cleaning process * * The automatic cleaning process destroy too old (for the given life time) * cache files when a new cache file is written. * 0 => no automatic cache cleaning * 1 => systematic cache cleaning * x (integer) > 1 => automatic cleaning randomly 1 times on x cache write * * @var int $_automaticCleaning */ var $_automaticCleaningFactor = 0; /** * Nested directory level * * Set the hashed directory structure level. 0 means "no hashed directory * structure", 1 means "one level of directory", 2 means "two levels"... * This option can speed up Cache_Lite only when you have many thousands of * cache file. Only specific benchs can help you to choose the perfect value * for you. Maybe, 1 or 2 is a good start. * * @var int $_hashedDirectoryLevel */ var $_hashedDirectoryLevel = 0; /** * Umask for hashed directory structure * * @var int $_hashedDirectoryUmask */ var $_hashedDirectoryUmask = 0700; // --- Public methods --- /** * Constructor * * $options is an assoc. Available options are : * $options = array( * 'cacheDir' => directory where to put the cache files (string), * 'caching' => enable / disable caching (boolean), * 'lifeTime' => cache lifetime in seconds (int), * 'fileLocking' => enable / disable fileLocking (boolean), * 'writeControl' => enable / disable write control (boolean), * 'readControl' => enable / disable read control (boolean), * 'readControlType' => type of read control 'crc32', 'md5', 'strlen' (string), * 'pearErrorMode' => pear error mode (when raiseError is called) (cf PEAR doc) (int), * 'memoryCaching' => enable / disable memory caching (boolean), * 'onlyMemoryCaching' => enable / disable only memory caching (boolean), * 'memoryCachingLimit' => max nbr of records to store into memory caching (int), * 'fileNameProtection' => enable / disable automatic file name protection (boolean), * 'automaticSerialization' => enable / disable automatic serialization (boolean) * 'automaticCleaningFactor' => distable / tune automatic cleaning process (int) * 'hashedDirectoryLevel' => level of the hashed directory system (int) * 'hashedDirectoryUmask' => umask for hashed directory structure (int) * ); * * @param array $options options * @access public */ function Cache_Lite($options = array(NULL)) { $availableOptions = array('hashedDirectoryUmask', 'hashedDirectoryLevel', 'automaticCleaningFactor', 'automaticSerialization', 'fileNameProtection', 'memoryCaching', 'onlyMemoryCaching', 'memoryCachingLimit', 'cacheDir', 'caching', 'lifeTime', 'fileLocking', 'writeControl', 'readControl', 'readControlType', 'pearErrorMode'); foreach($options as $key => $value) { if(in_array($key, $availableOptions)) { $property = '_'.$key; $this->$property = $value; } } $this->_refreshTime = time() - $this->_lifeTime; } /** * Test if a cache is available and (if yes) return it * * @param string $id cache id * @param string $group name of the cache group * @param boolean $doNotTestCacheValidity if set to true, the cache validity won't be tested * @return string data of the cache (or false if no cache available) * @access public */ function get($id, $group = 'default', $doNotTestCacheValidity = false) { $this->_id = $id; $this->_group = $group; $data = false; if ($this->_caching) { $this->_setFileName($id, $group); if ($this->_memoryCaching) { if (isset($this->_memoryCachingArray[$this->_file])) { if ($this->_automaticSerialization) { return unserialize($this->_memoryCachingArray[$this->_file]); } else { return $this->_memoryCachingArray[$this->_file]; } } else { if ($this->_onlyMemoryCaching) { return false; } } } if ($doNotTestCacheValidity) { if (file_exists($this->_file)) { $data = $this->_read(); } } else { if ((file_exists($this->_file)) && (@filemtime($this->_file) > $this->_refreshTime)) { $data = $this->_read(); } } if (($data) and ($this->_memoryCaching)) { $this->_memoryCacheAdd($this->_file, $data); } if (($this->_automaticSerialization) and (is_string($data))) { $data = unserialize($data); } return $data; } return false; } /** * Save some data in a cache file * * @param string $data data to put in cache (can be another type than strings if automaticSerialization is on) * @param string $id cache id * @param string $group name of the cache group * @return boolean true if no problem * @access public */ function save($data, $id = NULL, $group = 'default') { if ($this->_caching) { if ($this->_automaticSerialization) { $data = serialize($data); } if (isset($id)) { $this->_setFileName($id, $group); } if ($this->_memoryCaching) { $this->_memoryCacheAdd($this->_file, $data); if ($this->_onlyMemoryCaching) { return true; } } if ($this->_automaticCleaningFactor>0) { $rand = rand(1, $this->_automaticCleaningFactor); if ($rand==1) { $this->clean(false, 'old'); } } if ($this->_writeControl) { if (!$this->_writeAndControl($data)) { @touch($this->_file, time() - 2*abs($this->_lifeTime)); return false; } else { return true; } } else { return $this->_write($data); } } return false; } /** * Remove a cache file * * @param string $id cache id * @param string $group name of the cache group * @return boolean true if no problem * @access public */ function remove($id, $group = 'default')
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?