Cache.php 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. // +----------------------------------------------------------------------
  3. // | 萤火商城系统 [ 致力于通过产品和服务,帮助商家高效化开拓市场 ]
  4. // +----------------------------------------------------------------------
  5. // | Copyright (c) 2017~2024 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): bool
  39. {
  40. // 数据缓存
  41. if (in_array('data', $data['item'])) {
  42. // 强制模式
  43. $isForce = isset($data['isForce']) && (bool)$data['isForce'];
  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-image' => runtime_root_path() . 'image/',
  52. 'runtime-local' => runtime_root_path() . 'local/',
  53. ];
  54. foreach ($paths as $path) {
  55. $this->deleteFolder($path);
  56. }
  57. }
  58. return true;
  59. }
  60. /**
  61. * 递归删除指定目录下所有文件
  62. * @param $path
  63. * @return void
  64. */
  65. private function deleteFolder($path): void
  66. {
  67. if (!is_dir($path)) {
  68. return;
  69. }
  70. // 扫描一个文件夹内的所有文件夹和文件
  71. foreach (scandir($path) as $val) {
  72. // 排除目录中的.和..
  73. if (!in_array($val, ['.', '..', '.gitignore'])) {
  74. // 如果是目录则递归子目录,继续操作
  75. if (is_dir($path . $val)) {
  76. // 子目录中操作删除文件夹和文件
  77. $this->deleteFolder($path . $val . '/');
  78. // 目录清空后删除空文件夹
  79. rmdir($path . $val . '/');
  80. } else {
  81. // 如果是文件直接删除
  82. unlink($path . $val);
  83. }
  84. }
  85. }
  86. }
  87. }