来自phpguru得Php Cache类源码
2015-01-24信息快讯网
群里也有些朋友对基础知识很不屑,总说有能力就可以了,基础知识考不出来什么.对于这样的观点,我一直不苟同.
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); } }
源码打包下载
PHP正确配置mysql(apache环境)
PHP中获取内网用户MAC地址(WINDOWS/linux)的实现代码
兼容firefox,chrome的网页灰度效果
PHP header函数分析详解
php中用foreach来操作数组的代码
PHP 字符串正则替换函数preg_replace使用说明
php自定义函数call_user_func和call_user_func_array详解
php header Content-Type类型小结
Can't create/write to file 'C:\WINDOWS\TEMP\...MYSQL报错解决方法
php设计模式 Facade(外观模式)
php设计模式 Chain Of Responsibility (职责链模式)
php判断输入不超过mysql的varchar字段的长度范围
使用php shell命令合并图片的代码
php的memcached客户端memcached
PHP模块 Memcached功能多于Memcache
使用PHP提取视频网站页面中的FLASH地址的代码
php cache类代码(php数据缓存类)
php array_search() 函数使用
Fatal error: Call to undefined function curl_init()解决方法
DedeCMS dede_channeltype表字段注释
php上的memcache和memcached两个pecl库
php echo()和print()、require()和include()函数区别说明
Cakephp 执行主要流程
Smarty Foreach 使用说明
PHP 页面编码声明方法详解(header或meta)
php checkdate、getdate等日期时间函数操作详解
PHP Memcached + APC + 文件缓存封装实现代码
PHP clearstatcache()函数详解