dao = $dao; } //命令执行保存所有文件目录 public function syncfile() { // 展平目录扫描结果数组 $list = $this->flattenArray($this->scanDirectory()); $this->dao->saveAll($list); } //数据库中不存在的新增保存目录或文件信息 public function openSave($value,$list_key) { $count = $this->count(['full_path' => $list_key['real_path']]); if(!$count) { $path = str_replace('/' . $value['filename'], '', $list_key['real_path']); if(!$this->is_array_contain_string($path)){ $this->save([ 'name' => $value['filename'], 'path' => str_replace('/' . $value['filename'], '', $list_key['real_path']), 'full_path' => $list_key['real_path'], 'type' => $value['type'], 'create_time' => date('Y-m-d H:i:s', $value['ctime']), 'update_time' => date('Y-m-d H:i:s', time()), ]); } } } //查询字符串出现过数组中的字符,出现返回true,否则返回false public function is_array_contain_string($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 = array_diff(scandir($dir), array('.', '..')); // 遍历文件和子目录 foreach ($files as $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) && !in_array($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) { if(!$this->is_array_contain_string($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; } }