• 技术文章 >后端开发 >php教程

    一个PHP缓存类

    2016-07-25 08:45:08原创401
    1. cache.inc.php:
    2. class Cache {
    3. /**
    4. * $dir : 缓存文件存放目录
    5. * $lifetime : 缓存文件有效期,单位为秒
    6. * $cacheid : 缓存文件路径,包含文件名
    7. * $ext : 缓存文件扩展名(可以不用),这里使用是为了查看文件方便
    8. */
    9. private $dir;
    10. private $lifetime;
    11. private $cacheid;
    12. private $ext;
    13. /**
    14. * 析构函数,检查缓存目录是否有效,默认赋值
    15. */
    16. function __construct($dir='',$lifetime=1800) {
    17. if ($this->dir_isvalid($dir)) {
    18. $this->dir = $dir;
    19. $this->lifetime = $lifetime;
    20. $this->ext = '.Php';
    21. $this->cacheid = $this->getcacheid();
    22. }
    23. }
    24. /**
    25. * 检查缓存是否有效
    26. */
    27. private function isvalid() {
    28. if (!file_exists($this->cacheid)) return false;
    29. if (!(@$mtime = filemtime($this->cacheid))) return false;
    30. if (mktime() - $mtime > $this->lifetime) return false;
    31. return true;
    32. }
    33. /**
    34. * 写入缓存
    35. * $mode == 0 , 以浏览器缓存的方式取得页面内容
    36. * $mode == 1 , 以直接赋值(通过$content参数接收)的方式取得页面内容
    37. * $mode == 2 , 以本地读取(fopen ile_get_contents)的方式取得页面内容(似乎这种方式没什么必要)
    38. */
    39. public function write($mode=0,$content='') {
    40. switch ($mode) {
    41. case 0:
    42. $content = ob_get_contents();
    43. break;
    44. default:
    45. break;
    46. }
    47. ob_end_flush();
    48. try {
    49. file_put_contents($this->cacheid,$content);
    50. }
    51. catch (Exception $e) {
    52. $this->error('写入缓存失败!请检查目录权限!');
    53. }
    54. }
    55. /**
    56. * 加载缓存
    57. * exit() 载入缓存后终止原页面程序的执行,缓存无效则运行原页面程序生成缓存
    58. * ob_start() 开启浏览器缓存用于在页面结尾处取得页面内容
    59. */
    60. public function load() {
    61. if ($this->isvalid()) {
    62. echo "This is Cache. ";
    63. //以下两种方式,哪种方式好?????
    64. require_once($this->cacheid);
    65. //echo file_get_contents($this->cacheid);
    66. exit();
    67. }
    68. else {
    69. ob_start();
    70. }
    71. }
    72. /**
    73. * 清除缓存
    74. */
    75. public function clean() {
    76. try {
    77. unlink($this->cacheid);
    78. }
    79. catch (Exception $e) {
    80. $this->error('清除缓存文件失败!请检查目录权限!');
    81. }
    82. }
    83. /**
    84. * 取得缓存文件路径
    85. */
    86. private function getcacheid() {
    87. return $this->dir.md5($this->geturl()).$this->ext;
    88. }
    89. /**
    90. * 检查目录是否存在或是否可创建
    91. */
    92. private function dir_isvalid($dir) {
    93. if (is_dir($dir)) return true;
    94. try {
    95. mkdir($dir,0777);
    96. }
    97. catch (Exception $e) {
    98. $this->error('所设定缓存目录不存在并且创建失败!请检查目录权限!');
    99. return false;
    100. }
    101. return true;
    102. }
    103. /**
    104. * 取得当前页面完整url
    105. */
    106. private function geturl() {
    107. $url = '';
    108. if (isset($_SERVER['REQUEST_URI'])) {
    109. $url = $_SERVER['REQUEST_URI'];
    110. }
    111. else {
    112. $url = $_SERVER['Php_SELF'];
    113. $url .= empty($_SERVER['QUERY_STRING'])?'':'?'.$_SERVER['QUERY_STRING'];
    114. }
    115. return $url;
    116. }
    117. /**
    118. * 输出错误信息
    119. */
    120. private function error($str) {
    121. echo '
      '.$str.'
      ';
    122. }
    123. }
    124. ?>
    复制代码

    1. demo.php:
    2. /*
    3. * 可自由转载使用,请保留版权信息,谢谢使用!
    4. * Class Name : Cache (For Php5)
    5. * Version : 1.0
    6. * Description : 动态缓存类,用于控制页面自动生成缓存、调用缓存、更新缓存、删除缓存.
    7. * Author : jiangjun8528@163.com,Junin
    8. * Author Page : http://blog.csdn.Net/sdts/
    9. * Last Modify : 2007-8-22
    10. * Remark :
    11. 1.此版本为Php5版本,本人暂没有写Php4的版本,如需要请自行参考修改(比较容易啦,不要那么懒嘛,呵呵!).
    12. 2.此版本为utf-8编码,如果网站采用其它编码请自行转换,Windows系统用记事本打开另存为,选择相应编码即可(一般ANSI),Linux下请使用相应编辑软件或iconv命令行.
    13. 3.拷贝粘贴的就不用管上面第2条了.
    14. * 关于缓存的一点感想:
    15. * 动态缓存和静态缓存的根本差别在于其是自动的,用户访问页面过程就是生成缓存、浏览缓存、更新缓存的过程,无需人工操作干预.
    16. * 静态缓存指的就是生成静态页面,相关操作一般是在网站后台完成,需人工操作(也就是手动生成).
    17. */
    18. /*
    19. * 使用方法举例
    20. ------------------------------------Demo1-------------------------------------------
    21. require_once('cache.inc.php');
    22. $cachedir = './Cache/'; //设定缓存目录
    23. $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
    24. if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
    25. $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
    26. //页面代码开始
    27. echo date('H:i:s jS F');
    28. //页面代码结束
    29. $cache->write(); //首次运行或缓存过期,生成缓存
    30. ------------------------------------Demo2-------------------------------------------
    31. require_once('cache.inc.php');
    32. $cachedir = './Cache/'; //设定缓存目录
    33. $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
    34. if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
    35. $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
    36. //页面代码开始
    37. $content = date('H:i:s jS F');
    38. echo $content;
    39. //页面代码结束
    40. $cache->write(1,$content); //首次运行或缓存过期,生成缓存
    41. ------------------------------------Demo3-------------------------------------------
    42. require_once('cache.inc.php');
    43. define('CACHEENABLE',true);
    44. if (CACHEENABLE) {
    45. $cachedir = './Cache/'; //设定缓存目录
    46. $cache = new Cache($cachedir,10); //省略参数即采用缺省设置, $cache = new Cache($cachedir);
    47. if ($_GET['cacheact'] != 'rewrite') //此处为一技巧,通过xx.Php?cacheact=rewrite更新缓存,以此类推,还可以设定一些其它操作
    48. $cache->load(); //装载缓存,缓存有效则不执行以下页面代码
    49. }
    50. //页面代码开始
    51. $content = date('H:i:s jS F');
    52. echo $content;
    53. //页面代码结束
    54. if (CACHEENABLE)
    55. $cache->write(1,$content); //首次运行或缓存过期,生成缓存
    56. */
    57. ?>
    复制代码

    PHP
    声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn核实处理。
    专题推荐:一个PHP缓存类
    上一篇:备份MySQL的php类 下一篇:自己动手写 PHP MVC 框架(40节精讲/巨细/新人进阶必看)

    相关文章推荐

    • 实例详解PHP统计代码行数及文件数量的方法• PHP命名空间和自动加载类,PHP命名空间加载类_PHP教程• PHP里8个鲜为人知的安全函数分析,php鲜为人知函数_PHP教程• PHP利用MySQL保存session的实现思路及示例代码,mysqlsession_PHP教程• 使用 PHP 限制下载速度_PHP教程
    1/1

    PHP中文网