我使用以下脚本正确显示所选目录及其子目录中的所有文件。有谁知道如何修改此代码只回显目录/子目录中的最新文件?
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}"; }
答案 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()
功能。
这将为您提供上次修改日期的文件。