插件窝 干货文章 php 实现文件夹遍历

php 实现文件夹遍历

目录 遍历 递归 RecursiveDirecto 979    来源:    2025-03-19

在 PHP 中,你可以使用 scandir() 函数或 RecursiveDirectoryIterator 类来实现文件夹的遍历。以下是两种方法的示例:

方法一:使用 scandir() 函数

scandir() 函数会返回指定目录中的文件和目录的数组。

<?php
function listFiles($dir) {
    // 获取目录中的所有文件和目录
    $files = scandir($dir);

    foreach ($files as $file) {
        // 忽略当前目录和上级目录
        if ($file == '.' || $file == '..') {
            continue;
        }

        $path = $dir . DIRECTORY_SEPARATOR . $file;

        // 如果是目录,递归遍历
        if (is_dir($path)) {
            echo "目录: $path\n";
            listFiles($path);
        } else {
            echo "文件: $path\n";
        }
    }
}

// 调用函数遍历目录
listFiles('/path/to/your/directory');
?>

方法二:使用 RecursiveDirectoryIterator

RecursiveDirectoryIterator 类可以递归地遍历目录。

<?php
function listFiles($dir) {
    $iterator = new RecursiveIteratorIterator(
        new RecursiveDirectoryIterator($dir, RecursiveDirectoryIterator::SKIP_DOTS),
        RecursiveIteratorIterator::SELF_FIRST
    );

    foreach ($iterator as $file) {
        if ($file->isDir()) {
            echo "目录: " . $file->getPathname() . "\n";
        } else {
            echo "文件: " . $file->getPathname() . "\n";
        }
    }
}

// 调用函数遍历目录
listFiles('/path/to/your/directory');
?>

解释

  1. scandir() 方法

    • scandir() 函数返回指定目录中的所有文件和目录的数组。
    • 通过 is_dir() 函数判断是否为目录,如果是目录则递归调用 listFiles() 函数。
  2. RecursiveDirectoryIterator 方法

    • RecursiveDirectoryIterator 类可以递归地遍历目录。
    • RecursiveIteratorIterator 类用于遍历 RecursiveDirectoryIterator 对象。
    • SKIP_DOTS 标志用于跳过 ... 目录。
    • SELF_FIRST 标志表示先遍历目录本身,然后再遍历其子目录和文件。

注意事项

  • 确保你有权限访问指定的目录。
  • 如果目录结构非常深,递归方法可能会导致栈溢出,可以考虑使用迭代方法或增加递归深度限制。

这两种方法都可以有效地遍历文件夹及其子文件夹中的内容。根据你的需求选择合适的方法即可。