PHP - 如何从目录和子目录中获取最新文件

时间:2012-02-21 03:53:00

标签: php file filesystems subdirectory

我使用以下脚本正确显示所选目录及其子目录中的所有文件。有谁知道如何修改此代码只回显目录/子目录中的最新文件?

function ListFiles($dir) {

    if($dh = opendir($dir)) {

        $files = Array();
        $inner_files = Array();

        while($file = readdir($dh)) {
            if($file != "." && $file != ".." && $file[0] != '.') {
                if(is_dir($dir . "/" . $file)) {
                    $inner_files = ListFiles($dir . "/" . $file);
                    if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
                } else {
                    array_push($files, $dir . "/" . $file);
                }
            }
        }

        closedir($dh);
        return $files;
    }
}


foreach (ListFiles('media/com_form2content/documents/c30') as $key=>$file){
    echo "{aridoc engine=\"google\" width=\"750\" height=\"900\"}" . $file ."{/aridoc}";
}

5 个答案:

答案 0 :(得分:8)

PHP5中,您可以使用RecursiveDirectoryIterator递归扫描目录中的所有文件:

$mostRecentFilePath = "";
$mostRecentFileMTime = 0;

$iterator = new RecursiveIteratorIterator(new RecursiveDirectoryIterator("YOURDIR"), RecursiveIteratorIterator::CHILD_FIRST);
foreach ($iterator as $fileinfo) {
    if ($fileinfo->isFile()) {
        if ($fileinfo->getMTime() > $mostRecentFileMTime) {
            $mostRecentFileMTime = $fileinfo->getMTime();
            $mostRecentFilePath = $fileinfo->getPathname();
        }
    }
}

答案 1 :(得分:2)

您可以使用filemtime()检索文件的最后修改后的unix时间戳。

答案 2 :(得分:0)

你可以试试这个

$last_mtimes = array(); 
function ListFiles($dir) {

if($dh = opendir($dir)) {

$files = Array();
$inner_files = Array();

while($file = readdir($dh)) {
    if($file != "." && $file != ".." && $file[0] != '.') {
        if(is_dir($dir . "/" . $file)) {
            $inner_files = ListFiles($dir . "/" . $file);
            if(is_array($inner_files)) $files = array_merge($files, $inner_files); 
        } else {
            array_push($files, $dir . "/" . $file);
             $lmtime = filemtime($dir . "/" . $file) ;
             $last_mtimes[$lmtime] = $dir . "/" . $file;
        }
    }
}
 // now ksort your $last_mtimes array
krsort($last_mtimes);
// either return this array or do whatever with the first val
closedir($dh);
return ($last_mtimes);

}
}
// prints in decsending order
foreach (ListFiles('PATH_TO_YOUR_DIRECTORY') as $key=>$file){
echo "{aridoc engine=\"google\" width=\"750\" height=\"900\"}" . $key."=>".$file ."  {/aridoc}";
 }
 // prints last modified files
 echo array_shift(ListFiles('YOUR_DIRECTORY_PATH'));

希望这会有所帮助

答案 3 :(得分:0)

您可以使用它来获取目录

中的最后一个添加文件
$path = "/path/to/my/dir"; 

$latest_ctime = 0;
$latest_filename = '';    

$d = dir($path);
while (false !== ($entry = $d->read())) {
  $filepath = "{$path}/{$entry}";
  // could do also other checks than just checking whether the entry is a file
  if (is_file($filepath) && filectime($filepath) > $latest_ctime) {
      $latest_ctime = filectime($filepath);
      $latest_filename = $entry;
    }
  }
}

答案 4 :(得分:0)

我建议您使用filemtime()功能。

这将为您提供上次修改日期的文件。