• 注册
  • 代码教程 代码教程 关注:6 内容:36

    列出指定目录下的所有文件和子目录,并按照文件的修改时间从最新到最旧的顺序进行输出

  • 查看作者
  • 打赏作者
  • 9 渡劫 后期

    这个函数名为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("&nbsp;&nbsp;", $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("&nbsp;&nbsp;", $depth) . "[目录] " . basename($subDir) . "&nbsp;&nbsp;文件数量:".$fileCount."<br>";
            }
            
            listFiles($subDir, $depth + 1); // 递归调用以列出子目录下的文件和目录,深度加一
            if($fileCount > 0){echo '</div>';}
            
        }
    }
    
    
    
    
    
    
    
    
    
    
    
    $directory = "/Light-Year-Admin-Using-Iframe-v5-master/LT_ADMIN/image"; // 替换成你要列出文件和目录的目录路径
    listFiles($directory);

    函数功能的详细说明如下:

    1. 接收两个参数:$dir代表要列出文件的目录路径,$depth表示递归的深度,默认为0。

    2. 使用scandir函数获取指定目录中的文件和目录列表。

    3. 遍历目录中的文件和子目录,对于文件,获取文件的修改时间,存储在$fileInfo数组中;对于子目录,检查是否存在文件,如果有文件则将子目录路径保存在$subDirs数组中。

    4. $fileInfo数组中的文件信息按照修改时间进行倒序排序,确保最新修改的文件排在前面。

    5. 依次输出文件列表,包括文件名和修改时间。

    6. 遍历$subDirs数组中的子目录,统计子目录下的文件数量,并递归调用listFiles函数来列出子目录中的文件和目录,同时深度加一。

    7. 输出子目录信息,包括目录名和文件数量。

    通过这个函数,你可以方便地列出指定目录下所有文件和子目录,并按照修改时间倒序排列,以便快速了解最近修改的文件信息。

    请登录之后再进行评论

    登录
  • 任务
  • 偏好设置
  • 到底部
  • 帖子间隔 侧栏位置: