Cache的作用不用说大家都知道咯,这些天也面试了一些人,发现很多人框架用多了,基础都忘记了,你问一些事情,他总是说框架解决了,而根本不明白是怎么回事,所以也提醒大家应该注意平时基础知识的积累,之后对一些问题才能游刃有余. 群里也有些朋友对基础知识很不屑,总说有能力就可以了,基础知识考不出来什么.对于这样的观点,我一直不苟同. 这个只是一点感概罢了. 下面看正题,介绍一个php的Cache类: 贴一下代码吧:下面也有下载地址,其实很简单,重要的是学习 <div class="codetitle"><a style="CURSOR: pointer" data="40368" class="copybut" id="copybut40368" onclick="doCopy('code40368')"> 代码如下:<div class="codebody" id="code40368"> <?php / o------------------------------------------------------------------------------o | This package is licensed under the Phpguru license. A quick summary is | | that for commercial use,there is a small one-time licensing fee to pay. For | | registered charities and educational institutes there is a reduced license | | fee available. You can read more at: | | | | http://www.phpguru.org/static/license.html | o------------------------------------------------------------------------------o */ /* Caching Libraries for PHP5 Handles data and output caching. Defaults to /dev/shm (shared memory). All methods are static. Eg: (output caching) if (!OutputCache::Start('group','unique id',600)) { // ... Output OutputCache::End(); } Eg: (data caching) if (!$data = DataCache::Get('group','unique id')) { $data = time(); DataCache::Put('group',10,$data); } echo $data; / class Cache { / Whether caching is enabled @var bool */ public static $enabled = true; / Place to store the cache files @var string */ protected static $store = '/dev/shm/'; /* Prefix to use on cache files @var string / protected static $prefix = 'cache_'; / Stores data @param string $group Group to store data under @param string $id Unique ID of this data @param int $ttl How long to cache for (in seconds) / protected static function write($group,$id,$ttl,$data) { $filename = self::getFilename($group,$id); if ($fp = @fopen($filename,'xb')) { if (flock($fp,LOCK_EX)) { fwrite($fp,$data); } fclose($fp); // Set filemtime touch($filename,time() + $ttl); } } / Reads data @param string $group Group to store data under @param string $id Unique ID of this data */ protected static function read($group,$id) { $filename = self::getFilename($group,$id); return file_get_contents($filename); } /* Determines if an entry is cached @param string $group Group to store data under @param string $id Unique ID of this data / protected static function isCached($group,$id); if (self::$enabled && file_exists($filename) && filemtime($filename) > time()) { return true; } @unlink($filename); return false; } / Builds a filename/path from group,id and store. @param string $group Group to store data under @param string $id Unique ID of this data / protected static function getFilename($group,$id) { $id = md5($id); return self::$store . self::$prefix . "{$group}_{$id}"; } / Sets the filename prefix to use @param string $prefix Filename Prefix to use / public static function setPrefix($prefix) { self::$prefix = $prefix; } / Sets the store for cache files. Defaults to /dev/shm. Must have trailing slash. @param string $store The dir to store the cache data in */ public static function setStore($store) { self::$store = $store; } } / Output Cache extension of base caching class / class OutputCache extends Cache { / Group of currently being recorded data @var string */ private static $group; / ID of currently being recorded data @var string */ private static $id; /* Ttl of currently being recorded data @var int / private static $ttl; / Starts caching off. Returns true if cached,and dumps the output. False if not cached and start output buffering. @param string $group Group to store data under @param string $id Unique ID of this data @param int $ttl How long to cache for (in seconds) @return bool True if cached,false if not / public static function Start($group,$ttl) { if (self::isCached($group,$id)) { echo self::read($group,$id); return true; } else { ob_start(); self::$group = $group; self::$id = $id; self::$ttl = $ttl; return false; } } / Ends caching. Writes data to disk. / public static function End() { $data = ob_get_contents(); ob_end_flush(); self::write(self::$group,self::$id,self::$ttl,$data); } } / Data cache extension of base caching class / class DataCache extends Cache { / Retrieves data from the cache @param string $group Group this data belongs to @param string $id Unique ID of the data @return mixed Either the resulting data,or null / public static function Get($group,$id) { if (self::isCached($group,$id)) { return unserialize(self::read($group,$id)); } return null; } / Stores data in the cache @param string $group Group this data belongs to @param string $id Unique ID of the data @param int $ttl How long to cache for (in seconds) @param mixed $data The data to store */ public static function Put($group,$data) { self::write($group,serialize($data)); } } ?>
使用方法: <div class="codetitle"><a style="CURSOR: pointer" data="32082" class="copybut" id="copybut32082" onclick="doCopy('code32082')"> 代码如下:<div class="codebody" id="code32082"> $dir = !empty($_SERVER['argv'][1]) ? $_SERVER['argv'][1] : '.'; $dh = opendir($dir); while ($filename = readdir($dh)) { if ($filename == '.' OR $filename == '..') { continue; } if (filemtime($dir . DIRECTORY_SEPARATOR . $filename) < time()) { unlink($dir . DIRECTORY_SEPARATOR . $filename); } }
源码打包下载 (编辑:李大同)
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!
|