diff --git a/crmeb/app/services/system/log/SystemFileInfoServices.php b/crmeb/app/services/system/log/SystemFileInfoServices.php index af88e1051..90082cfaa 100644 --- a/crmeb/app/services/system/log/SystemFileInfoServices.php +++ b/crmeb/app/services/system/log/SystemFileInfoServices.php @@ -12,6 +12,27 @@ use app\services\BaseServices; */ class SystemFileInfoServices extends BaseServices { + // 排除部分目录 + protected $excluded_directories = array( + '/runtime/cache', + '/runtime/log', + '/runtime/session', + '/runtime/temp', + '/public/uploads/attach', + '/public/install/images/install', + '/public/admin/system_static/css', + '/public/admin/system_static/js', + '/public/admin/system_static/img', + '/public/admin/system_static/fonts', + '/public/admin/system_static/media', + '/public/static/css', + '/public/static/js', + '/public/static/img', + '/public/static/images', + '/public/statics/images', + '/public/statics/mp_view/static', + '/vendor' + ); /** * 构造方法 * SystemLogServices constructor. @@ -21,54 +42,67 @@ class SystemFileInfoServices extends BaseServices { $this->dao = $dao; } - + // 同步文件信息 public function syncfile() { $list = $this->flattenArray($this->scanDirectory()); $this->dao->saveAll($list); } - + //查询文件目录是否在排除目录中,是则返回true,否则返回false + public function isExcludedDirectory($string) { + foreach ($this->excluded_directories as $item) { + if (strpos($string,$item) === 0) { + return true; + } + } + return false; + } + // 递归扫描目录 public function scanDirectory($dir = '') { if ($dir == '') $dir = root_path(); $result = array(); - $files = scandir($dir); + // 获取目录下的所有文件和子目录 + $files = array_diff(scandir($dir), array('.', '..')); + // 遍历文件和子目录 foreach ($files as $file) { - if ($file != '.' && $file != '..') { - $path = $dir . '/' . $file; - $fileInfo = array( - 'name' => $file, - 'update_time' => date('Y-m-d H:i:s', filemtime($path)), - 'create_time' => date('Y-m-d H:i:s', filectime($path)), - 'path' => str_replace(root_path(), '', $dir), - 'full_path' => str_replace(root_path(), '', $path), - ); - if (is_dir($path)) { - $fileInfo['type'] = 'dir'; - $fileInfo['contents'] = $this->scanDirectory($path); - } else { - $fileInfo['type'] = 'file'; - } - $result[] = $fileInfo; + $path = $dir . '/' . $file; + $fileInfo = array( + 'name' => $file, + 'update_time' => date('Y-m-d H:i:s', filemtime($path)), + 'create_time' => date('Y-m-d H:i:s', filectime($path)), + 'path' => str_replace(root_path(), '', $dir), + 'full_path' => str_replace(root_path(), '', $path), + ); + // 判断是否是目录 并不在排除目录中 + if (is_dir($path) && !$this->isExcludedDirectory($file, $this->excluded_directories)) { + $fileInfo['type'] = 'dir'; + $fileInfo['contents'] = $this->scanDirectory($path); + } else { + $fileInfo['type'] = 'file'; } + $result[] = $fileInfo; } return $result; } - + // 数组扁平化 public function flattenArray($arr) { $result = array(); foreach ($arr as $item) { - $result[] = array( - 'name' => $item['name'], - 'type' => $item['type'], - 'update_time' => $item['update_time'], - 'create_time' => $item['create_time'], - 'path' => $item['path'], - 'full_path' => $item['full_path'], - ); - if (isset($item['contents'])) { - $result = array_merge($result, $this->flattenArray($item['contents'])); + //如果不是排除目录 + if(!$this->isExcludedDirectory($item['path'])){ + $result[] = array( + 'name' => $item['name'], + 'type' => $item['type'], + 'update_time' => $item['update_time'], + 'create_time' => $item['create_time'], + 'path' => $item['path'], + 'full_path' => $item['full_path'], + ); + if (isset($item['contents'])) { + $result = array_merge($result, $this->flattenArray($item['contents'])); + } } } return $result;