跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

来自phpguru得Php Cache类源码_php技巧

Cache的作用不用说大家都知道咯,这些天也面试了一些人,发现很多人框架用多了,基础都忘记了,你问一些事情,他总是说框架解决了,而根本不明白是怎么回事,所以也提醒大家应该注意平时基础知识的积累,之后对一些问题才能游刃有余.

群里也有些朋友对基础知识很不屑,总说有能力就可以了,基础知识考不出来什么.对于这样的观点,我一直不苟同.

这个只是一点感概罢了. 下面看正题,介绍一个php的Cache类:贴一下代码吧:下面也有下载地址,其实很简单,重要的是学习PHP 8.5.5 PHP 8.5.5 是 PHP 8.5 分支的维护更新版本。该版本延续了“小步快跑”的迭代逻辑,通过深度错误修复、底层性能微调以及安全加固,旨在为开发者提供一个更健壮、更高效的运行环境。该版本严格遵守语义化版本规范,不包含破坏性变更。

下载复制代码代码如下:php

** 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) unlink($dir . DIRECTORY_SEPARATOR . $filename);}}源码打包下载

相关文章