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

yizhihongxing

为了实现遍历文件夹的功能,可以使用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实现命令模式(command)

    学习PHP设计模式是PHP开发者提升自己技能的重要途径之一,其中命令模式是一种常用的设计模式。下面就为大家介绍如何学习PHP实现命令模式的攻略。 什么是命令模式? 命令模式是一种行为型设计模式,它将请求封装成对象,以便于参数化和传递给不同的方法。这个模式允许请求的发送者和接收者之间解耦,通过对象进行调用。 如何实现命令模式? 在实现命令模式时,需要创建一个接…

    PHP 2023年5月24日
    00
  • 如何在matlab路径中安装yalmip Matlab R2014a添加yalmip图文教程

    下面给您详细讲解如何在Matlab路径中安装Yalmip及添加Yalmip的完整攻略。步骤如下: 1. 下载并安装Yalmip Yalmip是一个Matlab的优化工具箱,可以通过下面Yalmip的官网进行下载: Yalmip官网下载地址 我们下载对应版本的Yalmip,并将其解压,一般会得到一个名为“Yalmip”的文件夹。 2. 将Yalmip添加到Ma…

    PHP 2023年5月26日
    00
  • php实现的递归提成方案实例

    下面我将详细讲解如何使用PHP来实现递归提成方案。 什么是递归提成方案? 递归提成方案是一种常见的提成计算模式,通常在多层级销售中使用。具体而言,该模式要求每个销售人员都可以获得自己的提成,同时还可以从他们发展的销售人员的提成中获取一个额外的提成。这种计算方式可以一直递归至销售人员成为顶级销售商或顶级代理商。 实现递归提成方案的步骤 1.创建销售人员数据结构…

    PHP 2023年5月26日
    00
  • php面向对象全攻略 (七) 继承性

    下面就是针对“PHP面向对象全攻略(七)继承性”的详细讲解攻略: 继承性 继承是一种能力,它允许新建的类自动继承为其所属的父/基类的所有属性和方法。在面向对象的编程中,我们常常需要定义一个类作为其他类的基础,然后实现一些公共的方法和属性,而其他子类可以通过继承这些公共的方法和属性来避免重复编写代码并扩展新的功能。PHP中继承的使用非常简单,下面我们就一起来看…

    PHP 2023年5月26日
    00
  • php实现分页功能的3种方法第3/3页

    PHP实现分页功能的3种方法第3/3页的完整攻略 一、分页功能的基本原理 分页功能可以理解为将一份较大的数据集合分割成若干个小的数据块,并根据用户需求一块一块地输出,从而达到减轻服务器负担和提高用户访问速度的目的。其基本原理是结合 SQL 语句中的 LIMIT 和 OFFSET 命令实现。其中,LIMIT 表示要读取多少条数据,OFFSET表示从哪条数据开始…

    PHP 2023年5月27日
    00
  • 浅析PHP数据导出知识点

    浅析PHP数据导出知识点 1. 为什么需要数据导出? 数据导出是将数据从一个系统或程序转移到另一个系统或程序的过程。在实际应用中,数据导出是非常常见的需求。比如,我们需要将某个数据库表格的数据导出到 Excel 或 CSV 文件中进行数据分析和处理。因此,掌握 PHP 数据导出的知识是非常必要的。 2. PHP 数据导出的方式 PHP 数据导出可以采用多种方…

    PHP 2023年5月26日
    00
  • php经典趣味算法实例代码

    介绍 本教程将介绍 PHP 中的一些经典趣味算法实例代码。这些算法涉及数字游戏、数学问题等,并且在面试中也可能会被问到。我们将讲解这些算法的实现过程,并提供代码示例供参考。 算法示例 水仙花数 水仙花数,又叫阿姆斯特朗数,是指一个三位数,它的各位数字立方和等于该数本身。 例如:153 就是一个水仙花数,因为 153 = 1^3 + 5^3 + 3^3。 PH…

    PHP 2023年5月24日
    00
  • .NET Core 微信小程序退款步骤——(统一退款)

    当微信小程序出现退款需求时,可以通过微信支付的接口来进行处理,其中,统一退款是常用的一种方式。下面是关于“.NET Core 微信小程序退款步骤——(统一退款)”的完整攻略。 1. 准备工作 在进行微信小程序退款之前,需要先在微信支付商户平台开通退款申请权限,并同时获取到以下信息: 微信支付商户号(mch_id)。 微信支付商户密钥(key)。 微信支付证书…

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