这个函数名为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函数来列出子目录中的文件和目录,同时深度加一。 -
输出子目录信息,包括目录名和文件数量。
通过这个函数,你可以方便地列出指定目录下所有文件和子目录,并按照修改时间倒序排列,以便快速了解最近修改的文件信息。
隐藏内容需要登录才可以看见
登录





