Cache.php 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2021 https://www.yiovo.com All rights reserved.
  6. // +----------------------------------------------------------------------
  7. // | Licensed 这不是一个自由软件,不允许对程序代码以任何形式任何目的的再发行
  8. // +----------------------------------------------------------------------
  9. // | Author: 萤火科技 <admin@yiovo.com>
  10. // +----------------------------------------------------------------------
  11. declare (strict_types = 1);
  12. namespace app\admin\service;
  13. use app\common\service\BaseService;
  14. use think\facade\Cache as CacheDriver;
  15. /**
  16. * 清理缓存
  17. * Class Cache
  18. */
  19. class Cache extends BaseService
  20. {
  21. // 缓存驱动句柄
  22. /** @var $CacheDriver \think\Cache */
  23. private $cache;
  24. /**
  25. * 构造方法
  26. * Cache constructor.
  27. */
  28. public function initialize()
  29. {
  30. // 实例化缓存驱动
  31. $this->cache = CacheDriver::instance();
  32. }
  33. /**
  34. * 删除缓存
  35. * @param $data
  36. * @return bool
  37. */
  38. public function rmCache($data)
  39. {
  40. // 数据缓存
  41. if (in_array('data', $data['item'])) {
  42. // 强制模式
  43. $isForce = isset($data['isForce']) ? (bool)$data['isForce'] : false;
  44. // 清除缓存
  45. $isForce ? $this->cache->clear() : $this->cache->tag('cache')->clear();
  46. }
  47. // 临时文件
  48. if (in_array('temp', $data['item'])) {
  49. $paths = [
  50. 'temp' => web_path() . 'temp/',
  51. 'runtime' => runtime_root_path() . 'image/'
  52. ];
  53. foreach ($paths as $path) {
  54. $this->deleteFolder($path);
  55. }
  56. }
  57. return true;
  58. }
  59. /**
  60. * 递归删除指定目录下所有文件
  61. * @param $path
  62. * @return bool
  63. */
  64. private function deleteFolder($path)
  65. {
  66. if (!is_dir($path))
  67. return false;
  68. // 扫描一个文件夹内的所有文件夹和文件
  69. foreach (scandir($path) as $val) {
  70. // 排除目录中的.和..
  71. if (!in_array($val, ['.', '..', '.gitignore'])) {
  72. // 如果是目录则递归子目录,继续操作
  73. if (is_dir($path . $val)) {
  74. // 子目录中操作删除文件夹和文件
  75. $this->deleteFolder($path . $val . '/');
  76. // 目录清空后删除空文件夹
  77. rmdir($path . $val . '/');
  78. } else {
  79. // 如果是文件直接删除
  80. unlink($path . $val);
  81. }
  82. }
  83. }
  84. return true;
  85. }
  86. }