在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
Cache的作用不用说大家都知道咯,这些天也面试了一些人,发现很多人框架 用多了,基础都忘记了,你问一些事情,他总是说框架解决了,而根本不明白 是怎么回事,所以也提醒大家应该注意平时基础知识的积累,之后对一些问 题才能游刃有余. 群里也有些朋友对基础知识很不屑,总说有能力就可以了, 基础知识考不出来什么.对于这样的观点,我一直不苟同. 这个只是一点感概罢了. 下面看正题,介绍一个php的Cache类:
All the code here is covered by the PHPGuru license. A short summary is that for any sort of commercial use there is a small one-off licensing fee to pay, and for charity and educational use there is a reduced license fee. You can read more about licensing here (where there's also a link to Google Checkout).
贴一下代码吧:下面也有下载地址,其实很简单,重要的是学习
<?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可以根据需要修改存储路径,例如当前的cache目录下 */ 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)); } } ?>
下载地址:http://www.phpguru.org/downloads/Cache/ 顺便说一下,这个网站也不错:http://www.phpguru.org/
|
2022-08-30
2022-08-17
2022-07-29
2022-11-06
2022-08-18
请发表评论