Это была моя первая версия (проверенная, рабочая):
function latest($searchDir, array $files = array()) {
$search = opendir($searchDir);
$dirs = array();
while($item = readdir($search)) {
if ($item == '.' || $item == '..') { continue; }
if (is_dir($searchDir.'/'.$item)) {
$dirs[] = $searchDir.'/'.$item;
}
if (is_file($searchDir.'/'.$item)) {
$ftime = filemtime($searchDir.'/'.$item);
$files[$ftime] = $searchDir.'/'.$item;
}
}
closedir($search);
if (count($dirs) > 0) {
foreach ($dirs as $dir) {
$files += latest($dir,$files);
}
}
krsort($files);
$files = array_slice($files, 0, 5, true);
return $files;
}
Но мне нравится использование байта glob()
, поэтому вот его слегка измененная версия для возврата того же формата:
function top5modsEx($dir) {
$mods = array();
foreach (glob($dir . '/*') as $f) {
$mods[filemtime($f)] = $f;
}
krsort($mods);
return array_slice($mods, 0, 5, true);
}
Возвращает время (формат отметки времени UNIX), в течение которого файл был изменен как ключ элемента в массиве.