Posted in PHP onApril 15, 2010
Cache的作用不用说大家都知道咯,这些天也面试了一些人,发现很多人框架用多了,基础都忘记了,你问一些事情,他总是说框架解决了,而根本不明白是怎么回事,所以也提醒大家应该注意平时基础知识的积累,之后对一些问题才能游刃有余.
群里也有些朋友对基础知识很不屑,总说有能力就可以了,基础知识考不出来什么.对于这样的观点,我一直不苟同.
这个只是一点感概罢了. 下面看正题,介绍一个php的Cache类:
贴一下代码吧:下面也有下载地址,其实很简单,重要的是学习
<?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', 'unique id', 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) { $filename = self::getFilename($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, $id, $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, $id, $ttl, $data) { self::write($group, $id, $ttl, serialize($data)); } } ?>
使用方法:
$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); } }
源码打包下载
来自phpguru得Php Cache类源码
声明:登载此文出于传递更多信息之目的,并不意味着赞同其观点或证实其描述。
Reply on: @reply_date@
@reply_contents@