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

Posted

技术标签:

【中文标题】PHP - 如何从目录和子目录中获取最新文件【英文标题】:PHP - how to get most recent file from directory AND subdirectories 【发布时间】:2012-03-11 10:22:02 【问题描述】:

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

函数 ListFiles($dir) 

    if($dh = opendir($dir)) 

        $files = 数组();
        $inner_files = 数组();

        而($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);
                 别的 
                    array_push($files, $dir . "/" . $file);
                
            
        

        关闭($dh);
        返回$文件;
    



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

【问题讨论】:

【参考方案1】:

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();
        
    

【讨论】:

感谢您的快速回复,但我需要跨目录和子目录获取最新文件。如何修改上面的代码? @bjornkock 所以你想在一个目录和它的子目录中获取最近 mtime 的文件?【参考方案2】:

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

【讨论】:

【参考方案3】:

您可以使用它来获取目录中的最后一个添加文件

$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】:

你可以试试这个

$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'));

希望对你有帮助

【讨论】:

感谢您的快速回复,但这似乎不起作用。 print_r($last_mtimes); 打印了什么。我很好奇为什么它不起作用。做了一个小编辑再试一次。请注意,我不会返回 $last_mtimes 数组 print_r($last_mtimes) 返回: Array ( [1329271076] => logo_lg.jpg ) Array ( [1327908278] => H1B application 2009.pdf ) Array ( [1329271671] => Employee Manual.pdf ) 数组 ( [1322843201] => Company.docx ) 数组 ( [1327909484] => prop01-06.JPG ) 但我只需要最新的文件。 上面的代码似乎可以工作,但它会按照各自最后修改日期的降序列出所有文件。如果您愿意,您可能希望在第一次迭代后打破 for 循环。或使用$most_recent_file = array_shift(ListFiles('YOUR_DIRECTORY_PATH')); 获取最近修改的文件【参考方案5】:

我建议你使用filemtime() 函数。

这将为您提供文件的最后修改日期。

【讨论】:

以上是关于PHP - 如何从目录和子目录中获取最新文件的主要内容,如果未能解决你的问题,请参考以下文章

如何从目录 PHP 中分别获取每个文件的大小

从目录和子目录 php 中获取所有文件、大小、路径

如何在MATLAB中获取特定目录下的所有文件?

如何编写 Windows 批处理脚本以从目录中复制最新文件?

Ant:如何从目录中选择最新的修改文件?

如何从 Laravel 5 的模块/目录中获取路由列表?