这个函数名为listFiles
,其作用是列出指定目录下的所有文件和子目录,并按照文件的修改时间从最新到最旧的顺序进行输出。
function listFiles($dir, $depth = 0){ $files = scandir($dir); //获取指定目录中的文件和目录列表 $fileInfo = array(); // 保存文件信息 $subDirs = array(); // 保存子目录 foreach ($files as $file) { if ($file != '.' && $file != '..') { $fullPath = $dir . '/' . $file; if (is_dir($fullPath)) { $subFiles = scandir($fullPath); $hasFiles = false; // 判断当前子目录是否有文件 // 检查子目录中是否存在文件 foreach ($subFiles as $subFile) { if ($subFile != '.' && $subFile != '..') { $hasFiles = true; break; } } // 如果子目录中有文件,则将其保存起来 if ($hasFiles) { $subDirs[] = $fullPath; } } else { // 获取文件修改时间并保存文件信息 $fileInfo[] = array( 'name' => $file, 'path' => $fullPath, 'mtime' => filemtime($fullPath) ); } } } // 根据文件修改时间对文件信息进行倒序排序 usort($fileInfo, function($a, $b) { return $b['mtime'] - $a['mtime']; // 按照修改时间倒序排列 }); // 输出文件 foreach ($fileInfo as $file) { echo str_repeat(" ", $depth) . "[文件] " . $file['name'] . " -----修改时间:" . date("Y-m-d H:i:s", $file['mtime']) . "<br>"; } // 输出当前目录的子目录 foreach ($subDirs as $subDir) { $fileCount = 0; $files2 = scandir($subDir); foreach ($files2 as $file2) { if(is_file($subDir.'/'.$file2)){$fileCount++;} } if($fileCount > 0){ //当前目录下文件数量大于0 echo '<br><br><div>'; echo str_repeat(" ", $depth) . "[目录] " . basename($subDir) . " 文件数量:".$fileCount."<br>"; } listFiles($subDir, $depth + 1); // 递归调用以列出子目录下的文件和目录,深度加一 if($fileCount > 0){echo '</div>';} } } $directory = "/Light-Year-Admin-Using-Iframe-v5-master/LT_ADMIN/image"; // 替换成你要列出文件和目录的目录路径 listFiles($directory);
函数功能的详细说明如下:
-
接收两个参数:
$dir
代表要列出文件的目录路径,$depth
表示递归的深度,默认为0。 -
使用
scandir
函数获取指定目录中的文件和目录列表。 -
遍历目录中的文件和子目录,对于文件,获取文件的修改时间,存储在
$fileInfo
数组中;对于子目录,检查是否存在文件,如果有文件则将子目录路径保存在$subDirs
数组中。 -
对
$fileInfo
数组中的文件信息按照修改时间进行倒序排序,确保最新修改的文件排在前面。 -
依次输出文件列表,包括文件名和修改时间。
-
遍历
$subDirs
数组中的子目录,统计子目录下的文件数量,并递归调用listFiles
函数来列出子目录中的文件和目录,同时深度加一。 -
输出子目录信息,包括目录名和文件数量。
通过这个函数,你可以方便地列出指定目录下所有文件和子目录,并按照修改时间倒序排列,以便快速了解最近修改的文件信息。