* name, "\n"; * } * ?> * * * @static * @access public * @return array * @param string $path * @param int $list * @param int $sort * @param mixed $cb */ public static function listDir($path, $list = Zeed_File_Util::FILE_LIST_ALL, $sort = Zeed_File_Util::FILE_SORT_NONE, $cb = null) { if (!strlen($path) || !is_dir($path)) { return null; } $entries = array(); for ($dir = dir($path); false !== $entry = $dir->read(); ) { if ($list & Zeed_File_Util::FILE_LIST_DOTS || $entry{0} !== '.') { $isRef = ($entry === '.' || $entry === '..'); $isDir = $isRef || is_dir($path .'/'. $entry); if ( ((!$isDir && $list & Zeed_File_Util::FILE_LIST_FILES) || ($isDir && $list & Zeed_File_Util::FILE_LIST_DIRS)) && (!is_callable($cb) || call_user_func_array($cb, array(&$entry)))) { $entries[] = (object) array( 'name' => $entry, 'size' => $isDir ? null : filesize($path .'/'. $entry), 'date' => filemtime($path .'/'. $entry), ); } } } $dir->close(); if ($sort) { $entries = Zeed_File_Util::sortFiles($entries, $sort); } return $entries; } /** * 文件排序 * * @return array * @param array $files * @param int $sort */ public static function sortFiles($files, $sort) { if (!$files) { return array(); } if (!$sort) { return $files; } if ($sort === 1) { return array_reverse($files); } if ($sort & Zeed_File_Util::FILE_SORT_RANDOM) { shuffle($files); return $files; } $names = array(); $sizes = array(); $dates = array(); if ($sort & Zeed_File_Util::FILE_SORT_NAME) { $r = &$names; } elseif ($sort & Zeed_File_Util::FILE_SORT_DATE) { $r = &$dates; } elseif ($sort & Zeed_File_Util::FILE_SORT_SIZE) { $r = &$sizes; } else { asort($files, SORT_REGULAR); return $files; } $sortFlags = array( Zeed_File_Util::FILE_SORT_NAME => SORT_STRING, Zeed_File_Util::FILE_SORT_DATE => SORT_NUMERIC, Zeed_File_Util::FILE_SORT_SIZE => SORT_NUMERIC, ); foreach ($files as $file) { $names[] = $file->name; $sizes[] = $file->size; $dates[] = $file->date; } if ($sort & Zeed_File_Util::FILE_SORT_REVERSE) { arsort($r, $sortFlags[$sort & ~1]); } else { asort($r, $sortFlags[$sort]); } $result = array(); foreach ($r as $i => $f) { $result[] = $files[$i]; } return $result; } } // End ^ LF ^ encoding