• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    迪恩网络公众号

收藏一个Php的Cache类

原作者: [db:作者] 来自: [db:来源] 收藏 邀请

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/ 

 


鲜花

握手

雷人

路过

鸡蛋
该文章已有0人参与评论

请发表评论

全部评论

专题导读
上一篇:
php面向对象三个特征发布时间:2022-07-10
下一篇:
免费淘宝IP地址库简介及PHP/C#调用实例发布时间:2022-07-10
热门推荐
阅读排行榜

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap