cache.init.php 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190
  1. <?php
  2. if (!defined('IS_INITPHP')) exit('Access Denied!');
  3. /*********************************************************************************
  4. * InitPHP 3.8.1 国产PHP开发框架 Dao-cache 数据缓存工厂类
  5. *-------------------------------------------------------------------------------
  6. * 版权所有: CopyRight By initphp.com
  7. * 您可以自由使用该源码,但是在使用过程中,请保留作者信息。尊重他人劳动成果就是尊重自己
  8. *-------------------------------------------------------------------------------
  9. * $Author:zhuli
  10. * $Dtime:2013-5-29
  11. ***********************************************************************************/
  12. class cacheInit{
  13. //缓存类型 FILE-文件缓存类型 MEM-内存缓存类型 MYSQL-数据库缓存类 APC-APC缓存
  14. private $cache_type = array('FILE','MEM', 'MYSQL', 'APC', 'XCACHE', 'WINCACHE');
  15. private static $instance = array(); //单例模式获取缓存类
  16. public $db_handle; //数据库连接对象,MYSQL缓存用到
  17. private $page_cache_key, $page_cache_time, $page_cache_type;
  18. /**
  19. * 缓存工厂-设置缓存
  20. * 1. 设置缓存的key值,value值,缓存时间和缓存类型
  21. * 2. 缓存时间设置为0,则是永久缓存
  22. * 3. 缓存类型 暂时只支持memcache,mysql,文件缓存
  23. * DAO中使用方法:$this->dao->cache->set_cache($key, $value, $time = 0, $type = 'FILE')
  24. * @param string $key 缓存键值
  25. * @param string $value 缓存数据
  26. * @param string $time 缓存时间
  27. * @param string $type 缓存类型
  28. * @return
  29. */
  30. public function set($key, $value, $time = 0, $type = 'FILE') {
  31. $cache = $this->get_cache_handle($type);
  32. return $cache->set_cache($key, $value, $time);
  33. }
  34. /**
  35. * 缓存工厂-获取缓存
  36. * 缓存的KEY值和缓存类型
  37. * DAO中使用方法:$this->dao->cache->get_cache($key,$type = 'FILE')
  38. * @param string $key 缓存键值
  39. * @param string $type 缓存类型
  40. * @return
  41. */
  42. public function get($key, $type = 'FILE') {
  43. $cache = $this->get_cache_handle($type);
  44. return $cache->get_cache($key);
  45. }
  46. /**
  47. * 缓存工厂-清除单个缓存
  48. * 缓存的KEY值和缓存类型
  49. * DAO中使用方法:$this->dao->clear($key, $type = 'FILE')
  50. * @param string $key 缓存键值
  51. * @param string $type 缓存类型
  52. * @return
  53. */
  54. public function clear($key, $type = 'FILE') {
  55. $cache = $this->get_cache_handle($type);
  56. return $cache->clear($key);
  57. }
  58. /**
  59. * 缓存工厂-清除所有缓存
  60. * 缓存类型
  61. * DAO中使用方法:$this->dao->clear_all($type = 'FILE')
  62. * @param string $type 缓存类型
  63. * @return
  64. */
  65. public function clear_all($type = 'FILE') {
  66. $cache = $this->get_cache_handle($type);
  67. return $cache->clear_all();
  68. }
  69. /**
  70. * 该接口获取缓存类接口
  71. * 支持通过该函数直接调用缓存中的私用方法(除了set get clear clear_all之外)
  72. * @param string $type 缓存类型
  73. * @return
  74. */
  75. public function get_cache($type = 'MEM') {
  76. return $this->get_cache_handle($type);
  77. }
  78. /**
  79. * 缓存工厂-页面缓存开始标记
  80. * 1. 设置缓存的key值,value值,缓存时间和缓存类型
  81. * 2. 缓存时间设置为0,则是永久缓存
  82. * 3. 缓存类型 暂时只支持memcache,mysql,文件缓存
  83. * @param string $key 缓存键值
  84. * @param string $value 缓存数据
  85. * @param string $time 缓存时间
  86. * @param string $type 缓存类型
  87. * @return
  88. */
  89. public function page_cache_start($key, $time = 0, $type = 'FILE') {
  90. $this->page_cache_key = 'initphp_page_cache_' . $key;
  91. $this->page_cache_time = $time;
  92. $this->page_cache_type = $type;
  93. $page = $this->get($this->page_cache_key, $this->page_cache_type);
  94. if (!$page) {
  95. ob_start();
  96. } else {
  97. echo $page;
  98. exit;
  99. }
  100. }
  101. /**
  102. * 缓存工厂-页面缓存结束标记
  103. * @return
  104. */
  105. public function page_cache_end() {
  106. $this->set($this->page_cache_key, ob_get_contents(), $this->page_cache_time, $this->page_cache_type);
  107. $page = $this->get($this->page_cache_key, $this->page_cache_type);
  108. ob_end_clean(); //清空缓冲
  109. echo $page;
  110. }
  111. /**
  112. * 缓存工厂-获取不同缓存类型的对象句柄
  113. * @param string $type 缓存类型
  114. * @return obj
  115. */
  116. private function get_cache_handle($type) {
  117. $InitPHP_conf = InitPHP::getConfig(); //需要设置文件缓存目录
  118. $type = strtoupper($type);
  119. $type = (in_array($type, $this->cache_type)) ? $type : 'FILE';
  120. switch ($type) {
  121. case 'FILE' :
  122. if (isset(cacheInit::$instance['filecache'])) return cacheInit::$instance['filecache'];
  123. $filecache = $this->load_cache('filecache.init.php', 'filecacheInit');
  124. $filepath = InitPHP::getAppPath($InitPHP_conf['cache']['filepath']);
  125. $filecache->set_cache_path($filepath);
  126. cacheInit::$instance['filecache'] = $filecache;
  127. return $filecache;
  128. break;
  129. case 'MEM' :
  130. if (isset(cacheInit::$instance['memcache'])) return cacheInit::$instance['memcache'];
  131. $mem = $this->load_cache('memcached.init.php', 'memcachedInit');
  132. $mem->add_server($InitPHP_conf['memcache']); //添加服务器
  133. cacheInit::$instance['memcache'] = $mem;
  134. return $mem;
  135. break;
  136. case 'MYSQL' :
  137. if (isset(cacheInit::$instance['mysqlcache'])) return cacheInit::$instance['mysqlcache'];
  138. $mysqlcache = $this->load_cache('mysqlcache.init.php', 'mysqlcacheInit');
  139. $mysqlcache->set_sql_handler($this->db_handle);
  140. cacheInit::$instance['mysqlcache'] = $mysqlcache;
  141. return $mysqlcache;
  142. break;
  143. case 'APC' :
  144. if (isset(cacheInit::$instance['apc'])) return cacheInit::$instance['apc'];
  145. $filecache = $this->load_cache('apc.init.php', 'apcInit');
  146. break;
  147. case 'XCACHE' :
  148. if (isset(cacheInit::$instance['xcache'])) return cacheInit::$instance['xcache'];
  149. $filecache = $this->load_cache('xcache.init.php', 'xcacheInit');
  150. break;
  151. case 'WINCACHE' :
  152. if (isset(cacheInit::$instance['wincache'])) return cacheInit::$instance['wincache'];
  153. $filecache = $this->load_cache('wincache.init.php', 'wincacheInit');
  154. break;
  155. }
  156. }
  157. /**
  158. * 缓存工厂-加载不同缓存类文件
  159. * @param string $file 缓存文件名
  160. * @param string $class 缓存类名
  161. * @return obj
  162. */
  163. private function load_cache($file, $class) {
  164. if (cacheInit::$instance['require'][$file] !== TRUE) {
  165. require('driver/' . $file);
  166. cacheInit::$instance['require'][$file] = TRUE;
  167. }
  168. if (cacheInit::$instance['class'][$class] !== TRUE) {
  169. cacheInit::$instance['class'][$class] = TRUE;
  170. return new $class;
  171. } else {
  172. return cacheInit::$instance['class'][$class];
  173. }
  174. }
  175. }