2010-05-27 56 views
1

我正在查找代碼,它遞歸地列出目錄中最近的五個文件。通過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 */ 
} 
?> 

它可以修改它以遞歸掃描目錄?

+1

你是什麼意思遞歸?你想列出給定目錄及其所有子目錄中最近觸及的五個文件? – Dereleased 2010-05-27 20:00:32

+0

是的,是的! 「列出給定目錄中最近觸及的五個文件及其所有子目錄」 – Peter 2010-05-27 20:21:02

回答

1

這是非常快速和骯髒的,和未經考驗的,但可能讓你開始:

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); 
} 
+0

' glob'不是遞歸的。 – 2013-09-17 19:57:42

2

這是我的第一個版本(測試工作):

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; 
} 

但我喜歡字節的使用的​​3210,所以這裏是他的稍微修改版本,返回相同的格式:

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

這將返回文件被修改爲數組元素鍵的時間(UNIX時間戳格式)。

+0

像魅力一樣工作!有沒有辦法從搜索中排除文件? – Peter 2010-05-30 13:29:37

+0

|| $ item =='exclude this'---這是解決方案。 非常感謝你! – Peter 2010-05-30 13:35:40