Получить последние рекурсивные файлы с помощью PHP

Я ищу код, который перечисляет пять последних файлов в каталоге рекурсивно.

Это нерекурсивный код, и для меня это было бы идеально, если бы оно было рекурсивным:

<?php $show = 0; // Leave as 0 for all $dir = 'sat/'; // Leave as blank for current if($dir) chdir($dir); $files = glob( '*.{html,php,php4,txt}', GLOB_BRACE ); usort( $files, 'filemtime_compare' ); function filemtime_compare( $a, $b ) { return filemtime( $b ) - filemtime( $a ); } $i = 0; foreach ( $files as $file ) { ++$i; if ( $i == $show ) break; echo $file . ' - ' . date( 'D, d M y H:i:s', filemtime($file) ) . '<br />' . "\n"; /* This is the output line */ } ?> 

Можно ли изменить его для сканирования каталогов рекурсивно?

Это была моя первая версия (проверенная, работающая):

 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), что файл был изменен как ключ элемента в массиве.

Это довольно быстро, грязно и непроверено, но вы можете начать:

 function top5mods($dir) { $mods = array(); foreach (glob($dir . '/*') as $f) { $mods[] = filemtime($f); } sort($mods); $mods = array_reverse($mods); return array_slice($mods, 0, 5); } 

Ознакомьтесь с этим решением в руководстве по PHP.