php实现遍历文件夹的方法汇总

为了实现遍历文件夹的功能,可以使用PHP提供的目录迭代器(DirectoryIterator)、文件迭代器(FilesystemIterator)和递归函数等方式。

目录迭代器(DirectoryIterator)

DirectoryIterator 的基本使用

DirectoryIterator 可以基于指定的目录路径或文件夹资源句柄来创建,然后通过对其进行循环,可以访问目录中的所有文件和子目录,代码如下:

$dir_path = "/path/to/dir"; // 目标文件夹路径
try {
    foreach(new DirectoryIterator($dir_path) as $file) {
        if($file->isDot()) continue; // 跳过'.'和'..'
        if($file->isFile()) {
            echo "File: " . $file . "\n";
        } elseif($file->isDir()) {
            echo "Directory: " . $file . "\n";
            // 遍历子目录
            foreach(new DirectoryIterator($file->getPathname()) as $sub_file) {
                if($sub_file->isDot()) continue; // 跳过'.'和'..'
                if($sub_file->isFile()) {
                    echo "   Sub File: " . $sub_file . "\n";
                } elseif($sub_file->isDir()) {
                    echo "   Sub Directory: " . $sub_file . "\n";
                }
            }
        }
    }
} catch (Exception $e) {
    echo $e->getMessage();
}

DirectoryIterator 示例1:输出指定目录下所有文件的文件名

$dir_path = "/path/to/dir"; // 目标文件夹路径
try {
    foreach(new DirectoryIterator($dir_path) as $file) {
        if($file->isDot()) continue; // 跳过'.'和'..'
        if($file->isFile()) {
            echo $file->getFilename() . "\n";
        }
    }
} catch (Exception $e) {
    echo $e->getMessage();
}

DirectoryIterator 示例2:删除指定目录下所有文件(包括子目录中的文件)

function delete_all_files($dir_path) {
    try {
        $iterator = new DirectoryIterator($dir_path);
        foreach ($iterator as $file) {
            if ($file->isDot()) continue;
            if ($file->isFile()) unlink($file->getPathname());
            if ($file->isDir()) delete_all_files($file->getPathname());
        }
        rmdir($dir_path);
    } catch (Exception $e) {
        echo $e->getMessage();
    }
}

$dir_path = "/path/to/dir"; // 目标文件夹路径
delete_all_files($dir_path);

文件迭代器(FilesystemIterator)

FilesystemIterator 的基本使用

FilesystemIterator 遍历指定路径下的所有文件和子目录,能够以很多不同的方式排序和过滤文件列表。代码示例如下:

$dir_path = "/path/to/dir"; // 目标文件夹路径
try {
    $iterator = new \FilesystemIterator($dir_path);
    foreach ($iterator as $file) {
        if ($file->isFile()) {
            echo "File: " . $file . "\n";
        } elseif ($file->isDir()) {
            echo "Directory: " . $file . "\n";
            // 遍历子目录
            $sub_iterator = new \FilesystemIterator($file->getPathname());
            foreach ($sub_iterator as $sub_file) {
                if ($sub_file->isFile()) {
                    echo "   Sub File: " . $sub_file . "\n";
                } elseif ($sub_file->isDir()) {
                    echo "   Sub Directory: " . $sub_file . "\n";
                }
            }
        }
    }
} catch (\Exception $e) {
    echo $e->getMessage();
}

FilesystemIterator 示例1:输出指定目录下所有文件的文件名

$dir_path = "/path/to/dir"; // 目标文件夹路径
try {
    $iterator = new \FilesystemIterator($dir_path);
    foreach ($iterator as $file) {
        if($file->isFile()) {
            echo $file->getFilename() . "\n";
        }
    }
} catch (\Exception $e) {
    echo $e->getMessage();
}

FilesystemIterator 示例2:删除指定目录下所有文件(包括子目录中的文件)

function delete_all_files($dir_path) {
    try {
        $iterator = new \FilesystemIterator($dir_path);
        foreach ($iterator as $file) {
            if($file->isDir()) {
                delete_all_files($file->getPathname());
                rmdir($file->getPathname());
            }
            if ($file->isFile()) unlink($file->getPathname());
        }
        rmdir($dir_path);
    } catch (\Exception $e) {
        echo $e->getMessage();
    }
}

$dir_path = "/path/to/dir"; // 目标文件夹路径
delete_all_files($dir_path);

递归函数方式

递归方式遍历指定目录

递归遍历目录是常用的遍历方式,相比于目录或文件迭代器来说,递归方式并不需要一次性地将整个目录中的所有文件和子目录都放入内存中。递归遍历的代码示例如下:

function traverse_dir($dir_path) {
    if(!is_dir($dir_path)) {
        return;
    }
    $handle = opendir($dir_path);
    while(($file = readdir($handle)) !== false) {
        if($file !== '.' && $file !== '..') {
            $file_path = $dir_path . DIRECTORY_SEPARATOR . $file;
            if(is_file($file_path)) {
                echo "File: " . $file_path . "\n";
            } elseif(is_dir($file_path)) {
                echo "Directory: " . $file_path . "\n";
                // 遍历子目录
                traverse_dir($file_path);
            }
        }
    }
    closedir($handle);
}

递归方式遍历指定目录的示例1:输出指定目录下所有文件的文件名

function traverse_dir($dir_path) {
    if(!is_dir($dir_path)) {
        return;
    }
    $handle = opendir($dir_path);
    while(($file = readdir($handle)) !== false) {
        if($file !== '.' && $file !== '..') {
            $file_path = $dir_path . DIRECTORY_SEPARATOR . $file;
            if(is_file($file_path)) {
                echo $file_path . "\n";
            } elseif(is_dir($file_path)) {
                traverse_dir($file_path);
            }
        }
    }
    closedir($handle);
}

$dir_path = "/path/to/dir"; // 目标文件夹路径
traverse_dir($dir_path);

递归方式遍历指定目录的示例2:删除指定目录下所有文件(包括子目录中的文件)

function delete_all_files($dir_path) {
    if(!is_dir($dir_path)) {
        return;
    }
    $handle = opendir($dir_path);
    while(($file = readdir($handle)) !== false) {
        if($file !== '.' && $file !== '..') {
            $file_path = $dir_path . DIRECTORY_SEPARATOR . $file;
            if(is_file($file_path)) {
                unlink($file_path);
            } elseif(is_dir($file_path)) {
                delete_all_files($file_path);
                rmdir($file_path);
            }
        }
    }
    closedir($handle);
    rmdir($dir_path);
}

$dir_path = "/path/to/dir"; // 目标文件夹路径
delete_all_files($dir_path);

以上就是常见的PHP实现遍历文件夹的几种方式。在实际的开发过程中,可以根据实际情况选择合适的遍历方式。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php实现遍历文件夹的方法汇总 - Python技术站

(0)
上一篇 2023年5月26日
下一篇 2023年5月26日

相关文章

  • PHP实现的链式队列结构示例

    下面就让我来详细讲解“PHP实现的链式队列结构示例”的完整攻略。 一、什么是链式队列结构 链式队列结构是指使用链表的数据结构来实现队列。队列的一端叫做队尾,在队尾添加元素;另一端叫做队头,在队头删除元素。在链式队列中,队头和队尾分别对应链表的头和尾。 二、链式队列结构的操作 链式队列结构的主要操作包括入队(enqueue)和出队(dequeue)。入队操作向…

    PHP 2023年5月27日
    00
  • PHP采用超长(超大)数字运算防止数字以科学计数法显示的方法

    对于一些很大或很小的数字,PHP内部会以科学计数法的形式显示,即以指数形式表示。例如,1.234E+5表示的是1.234 × 10^5,这在一些场合下不太方便使用。PHP采用了超长数字运算的方法,来解决这个问题。 超长数字运算指将数字作为字符串处理,而不是转换为数值进行计算。在处理超长数字运算时,我们可以使用下面这些函数: bcadd():高精度加法函数,用…

    PHP 2023年5月26日
    00
  • smarty模板数学运算示例

    下面详细讲解 “smarty模板数学运算示例” 的完整攻略: 1. 什么是Smarty模板? Smarty模板引擎是一个基于 PHP的模板引擎。Smarty模板引擎将业务逻辑与展现逻辑分开,使 HTML 代码更加简洁,易于维护。 为了使用Smarty模板引擎,需要在PHP项目中安装Smarty,并进行相关的配置。 2. Smarty模板数学运算示例 在Sma…

    PHP 2023年5月26日
    00
  • PHP使用数组依次替换字符串中匹配项

    使用数组依次替换字符串中匹配项是PHP中常用的操作,下面是具体的攻略: 1. 准备替换的字符串 首先,我们需要一个待替换的字符串。例如,我们有一个字符串为: Hello, {name}. Your age is {age}. 其中,{name}和{age}都是需要替换的占位符。我们将使用PHP中的数组,来依次替换这些占位符。 2. 创建替换数组 在PHP中,…

    PHP 2023年5月26日
    00
  • PHP中->和=>的含义及使用示例解析

    请听我讲解关于“PHP中->和=>的含义及使用示例解析”的完整攻略。 1. -> 的含义及使用示例解析 1.1 含义 在 PHP 中,->是一种对象操作符,用于访问和调用对象的属性和方法。 1.2 示例解析 以下代码演示了如何创建一个对象、调用对象的属性和方法,并输出结果: class Person { public $name; p…

    PHP 2023年5月26日
    00
  • PHP操作文件类的函数代码(文件和文件夹创建,复制,移动和删除)

    这里是PHP操作文件类的函数代码的完整攻略。我们将会介绍文件和文件夹的创建,复制,移动和删除,具体实现细节如下: 文件和文件夹创建 创建文件 要在 PHP 中创建文件,我们可以使用 fopen() 函数。该函数的第一个参数是文件名,第二个参数是文件要打开的模式。如果文件不存在,它会创建一个新文件。 <?php $myfile = fopen(&quot…

    PHP 2023年5月26日
    00
  • PHP获取特殊时间戳的方法整理

    下面是“PHP获取特殊时间戳的方法整理”的完整使用攻略,包括问题原因、解决方法和两个示例。 问题原因 在PHP开发中,有时需要获取特殊时间戳,例如获取当前月份的时间戳、获取昨天的时间戳等。但是,对于一些初学者来说,可能不太清楚如何实现这个功能。 解决方法 以下是实现获取特殊时间戳的方法: 使用PHP内置函数 PHP提供了一些内置函数,可以用于获取特殊时间戳。…

    PHP 2023年5月12日
    00
  • PHP中soap的用法实例

    标题:PHP中SOAP的用法实例 什么是SOAP? SOAP(Simple Object Access Protocol)是一种基于XML(eXtensible Markup Language)的通信协议。它被用于不同的应用程序之间的数据交互。 SOAP的优点 松耦合(Loose Coupling):SOAP协议可用于传输以XML为基础格式生成的消息体。 这…

    PHP 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部