CacheFileService.php 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | Fanwe 方维直播系统
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2011 http://www.fanwe.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Author: 云淡风轻(1956838968@qq.com)
  8. // +----------------------------------------------------------------------
  9. class CacheFileService extends CacheService
  10. {//类定义开始
  11. /**
  12. +----------------------------------------------------------
  13. * 架构函数
  14. +----------------------------------------------------------
  15. * @access public
  16. +----------------------------------------------------------
  17. */
  18. private $dir;
  19. public function __construct()
  20. {
  21. $this->dir = APP_ROOT_PATH."public/runtime/data/";
  22. $this->init();
  23. }
  24. public function set_dir($dir='')
  25. {
  26. if($dir!='')
  27. {
  28. $this->dir = $dir;
  29. $this->init();
  30. }
  31. }
  32. /**
  33. +----------------------------------------------------------
  34. * 初始化检查
  35. +----------------------------------------------------------
  36. * @access private
  37. +----------------------------------------------------------
  38. * @return boolen
  39. +----------------------------------------------------------
  40. */
  41. private function init()
  42. {
  43. $stat = @stat($this->dir);
  44. // 创建项目缓存目录
  45. if (!is_dir($this->dir)) {
  46. if (! mkdir($this->dir))
  47. return false;
  48. @chmod($this->dir, 0777);
  49. }
  50. }
  51. private function filename($name,$mdir=false)
  52. {
  53. $name = md5($name);
  54. $filename = $name.'.php';
  55. $hash_dir = $this->dir . '/c' . substr(md5($name), 0, 1)."/";
  56. if ($mdir&&!is_dir($hash_dir))
  57. {
  58. @mkdir($hash_dir);
  59. @chmod($hash_dir, 0777);
  60. }
  61. $hash_dir = $hash_dir . 'c' . substr(md5($name), 1, 1)."/";
  62. if ($mdir&&!is_dir($hash_dir))
  63. {
  64. @mkdir($hash_dir);
  65. @chmod($hash_dir, 0777);
  66. }
  67. return $hash_dir.$this->prefix.$filename;
  68. }
  69. /**
  70. +----------------------------------------------------------
  71. * 读取缓存
  72. +----------------------------------------------------------
  73. * @access public
  74. +----------------------------------------------------------
  75. * @param string $name 缓存变量名
  76. +----------------------------------------------------------
  77. * @return mixed
  78. +----------------------------------------------------------
  79. */
  80. public function get($name)
  81. {
  82. if(IS_DEBUG)return false;
  83. $var_name = md5($name);
  84. global $$var_name;
  85. if($$var_name)
  86. {
  87. return $$var_name;
  88. }
  89. $filename = $this->filename($name);
  90. $content = @file_get_contents($filename);
  91. if( false !== $content) {
  92. $expire = (int)substr($content,8, 12);
  93. if($expire != -1 && time() > filemtime($filename) + $expire) {
  94. //缓存过期删除缓存文件
  95. @unlink($filename);
  96. return false;
  97. }
  98. $content = substr($content,20, -3);
  99. $content = unserialize($content);
  100. $$var_name = $content;
  101. return $content;
  102. }
  103. else {
  104. return false;
  105. }
  106. }
  107. /**
  108. +----------------------------------------------------------
  109. * 写入缓存
  110. +----------------------------------------------------------
  111. * @access public
  112. +----------------------------------------------------------
  113. * @param string $name 缓存变量名
  114. * @param mixed $value 存储数据
  115. * @param int $expire 有效时间 -1 为永久
  116. +----------------------------------------------------------
  117. * @return boolen
  118. +----------------------------------------------------------
  119. */
  120. public function set($name,$value,$expire ="-1")
  121. {
  122. if(IS_DEBUG)return false;
  123. if($expire=='-1') $expire = 3600*24;
  124. $filename = $this->filename($name,true);
  125. $data = serialize($value);
  126. $data = "<?php\n//".sprintf('%012d',$expire).$check.$data."\n?>";
  127. $rs = @file_put_contents($filename,$data);
  128. if($rs)
  129. return true;
  130. else
  131. return false;
  132. }
  133. /**
  134. +----------------------------------------------------------
  135. * 删除缓存
  136. +----------------------------------------------------------
  137. * @access public
  138. +----------------------------------------------------------
  139. * @param string $name 缓存变量名
  140. +----------------------------------------------------------
  141. * @return boolen
  142. +----------------------------------------------------------
  143. */
  144. public function rm($name)
  145. {
  146. return unlink($this->filename($name));
  147. }
  148. /**
  149. +----------------------------------------------------------
  150. * 清除缓存
  151. +----------------------------------------------------------
  152. * @access public
  153. +----------------------------------------------------------
  154. * @param string $name 缓存变量名
  155. +----------------------------------------------------------
  156. * @return boolen
  157. +----------------------------------------------------------
  158. */
  159. public function clear()
  160. {
  161. $this->del_name_logs();
  162. $path = $this->dir;
  163. clear_dir_file($path);
  164. }
  165. }//类定义结束
  166. ?>