Cache.php 2.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394
  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']) && $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 bool
  64. */
  65. private function deleteFolder($path)
  66. {
  67. if (!is_dir($path))
  68. return false;
  69. // 扫描一个文件夹内的所有文件夹和文件
  70. foreach (scandir($path) as $val) {
  71. // 排除目录中的.和..
  72. if (!in_array($val, ['.', '..', '.gitignore'])) {
  73. // 如果是目录则递归子目录,继续操作
  74. if (is_dir($path . $val)) {
  75. // 子目录中操作删除文件夹和文件
  76. $this->deleteFolder($path . $val . '/');
  77. // 目录清空后删除空文件夹
  78. rmdir($path . $val . '/');
  79. } else {
  80. // 如果是文件直接删除
  81. unlink($path . $val);
  82. }
  83. }
  84. }
  85. return true;
  86. }
  87. }