常见php数据文件缓存类汇总

这篇文章主要介绍了常见php数据文件缓存类,实例讲述了php文件缓存与利用memcache来缓存数据的方法,代码封装性好,使用简单,是非常实用的技巧,需要的朋友可以参考下。

本文实例汇总了常见php数据文件缓存类。分享给大家供大家参考,具体分析如下:

数据文件缓存的做法我们常用的有php文件缓存与利用memcache来缓存数据,下面面我分别总结了memcache缓存数据与数据文件缓存。感兴趣的朋友可以参考一下。

1.对于一般的变量,把该变量变成php语言的格式,写到文件中,用时只要include这个文件就相当于加载了cache了.

2.对于array型的变量,把array转化为php语言定义array的字符串,写到文件中,用时也只要include就相当于加载了cache了.

3.缓存cache时间上的控制,通过获取缓存文件的创建时间和现在的时间进行对比,如果没有到更新时间,直接读取缓存,如果到了更新时间,查询数据库.

文件缓存类,代码如下:

  1. <?php
  2. class DataCache
  3. {
  4. /**
  5. * 数组转换
  6. *
  7. * @param array $array
  8. * @param string $arrayName
  9. * @param array $level
  10. *
  11. * @return string
  12. */
  13. private function arrayEval($array, $arrayName = '', $level = 0)
  14. {
  15. $space = str_repeat("t", $level);
  16. if (emptyempty($arrayName))
  17. {
  18. $evaluate = "arrayn$space(n";
  19. }
  20. else
  21. {
  22. $evaluate = "${$arrayName} = arrayn$space(n";
  23. }
  24. $space2 = str_repeat("t", $level + 1);
  25. $comma = $space2;
  26. if (!emptyempty($array))
  27. {
  28. foreach ($array as $key => $val)
  29. {
  30. $key = is_string($key) ? ''' . addcslashes($key, ''\') . ''' : $key;
  31. $val = !is_array($val) && (!preg_match('/^-?[1-9]d*$/', $val) || strlen($val) > 12) ? ''' . addcslashes($val, ''\') . ''' : $val;
  32. if (is_array($val))
  33. {
  34. $evaluate .= "$comma$key => " . arrayEval($val, '', $level + 1);
  35. }
  36. else
  37. {
  38. $evaluate .= "$comma$key => $val";
  39. }
  40. $comma = ",n$space2";
  41. }
  42. }
  43. $evaluate .= "n$space)";
  44. // 最后才需要一个“;”
  45. if ($level == 0)
  46. {
  47. $evaluate .= ";";
  48. }
  49. return $evaluate;
  50. }
  51. /**
  52. * 写入缓存
  53. *
  54. * @param string $path
  55. * @param string $arrayName
  56. * @param array $data
  57. *
  58. * @return boolean
  59. */
  60. public static function writeCache($path, $arrayName, $data)
  61. {
  62. if ($handle = fopen($path, 'w+'))
  63. {
  64. $data = self::arrayEval($data, $arrayName);
  65. $dataConvert = "<?phpn" . $data;
  66. flock($handle, LOCK_EX);
  67. $rs = fputs($handle, $dataConvert);
  68. flock($handle, LOCK_UN);
  69. fclose($handle);
  70. if ($rs !== false)
  71. {
  72. return true;
  73. }
  74. }
  75. return false;
  76. }
  77. }
  78. ?>

调用方法,代码如下:

  1. /**
  2. * 生成文件缓存
  3. *
  4. * @param string $filePath 缓存文件的保存路径
  5. * @param string $arrayName 存放在缓存文件中的数组名称
  6. * @param array $data 数据
  7. *
  8. * @return boolean
  9. */
  10. DataCache::writeCache($filePath, $arrayName, $data);

memcache来缓存数据,这里提供这个文件缓存的类,代码如下:

  1. <?php
  2. /**
  3. * 文件缓存类
  4. * 提供文件缓存
  5. */
  6. class Cache_FileCache{
  7. /**
  8. * 设置缓存
  9. * @param $key 缓存的关键字key
  10. * @param $data 缓存的内容
  11. * @param $cacheLife 缓存时间(单位为秒)如果为0 则表示无限时间
  12. * @return Bool
  13. */
  14. public static function setCache($key,$data,$cacheLife)
  15. {
  16. if(file_exists(__SITE_FILE_CACHE))
  17. {
  18. @$file = __SITE_FILE_CACHE . "/" . $key .".php";
  19. $cache = array();
  20. $time = __SYS_TIME;
  21. $cache['content'] = $data;
  22. $cache['expire'] = $cacheLife === 0 ? 0 : $time+$cacheLife;
  23. $cache['mtime'] = $time;
  24. $cache = serialize($cache);
  25. $setReslut = @file_put_contents($file,$cache) or self::error(__line__,"文件写入出错");
  26. $chmodReslut = @chmod($file,0777) or self::error(__line__,"设定文件权限失败");
  27. if($setReslut && $chmodReslut)
  28. {
  29. return true;
  30. }
  31. else
  32. {
  33. return false;
  34. }
  35. }
  36. }
  37. /**
  38. * 得到缓存数据
  39. * @param $key 缓存的关键字key
  40. * @return array
  41. */
  42. public static function getCache($key)
  43. {
  44. @$file = __SITE_FILE_CACHE . "/" . $key .".php";
  45. if(file_exists($file))
  46. {
  47. $data = @file_get_contents($file);
  48. $data = unserialize($data);
  49. if($data['expire']==0 || $data['expire'] > __SYS_TIME)
  50. {
  51. return $data['content'];
  52. }
  53. else
  54. {
  55. unlink($file);
  56. return array();
  57. }
  58. }
  59. }
  60. /**
  61. * 删除缓存文件
  62. * @param $key 缓存$key
  63. * @return Bool
  64. */
  65. public static function delCache($key)
  66. {
  67. if (@unlink(__SITE_FILE_CACHE."/".$key.".php"))
  68. {
  69. return true;
  70. }
  71. else
  72. {
  73. return false;
  74. }
  75. }
  76. /**
  77. * 清除所有缓存文件
  78. * @return Bool
  79. */
  80. public static function clearAllCache()
  81. {
  82. $files = scandir(__SITE_FILE_CACHE);
  83. foreach ($files as $val)
  84. {
  85. @unlink(__SITE_FILE_CACHE."/".$val);
  86. }
  87. }
  88. /**
  89. * 出错处理函数
  90. * @param $line 行数
  91. * @param $msg 信息
  92. */
  93. public static function error($line,$msg)
  94. {
  95. die("出错文件:".__file__."/n出错行:$line/n错误信息:$msg");
  96. } //www.phpfensi.com
  97. }
  98. ?>

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。