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导出MySQL数据到Excel文件(fputcsv)

    PHP导出MySQL数据到Excel文件(fputcsv) 概述 本篇攻略将会详细介绍使用PHP将MySQL数据导出至Excel文件的方法,采用fputcsv函数实现,其可以在CSV文件中创建一行。 准备工作 在使用该方法之前需要确保以下条件已经满足: PHP环境已经安装并配置成功 已经安装并启动MySQL数据库并成功连接它 了解fputcsv函数的使用方法…

    PHP 2023年5月26日
    00
  • 解析PHP处理换行符的问题 \r\n

    文本中的换行符在不同的操作系统中可能有区别,例如Windows系统使用CR(回车符)和LF(换行符)作为换行符,而Unix-like系统只使用LF作为换行符。当在PHP代码中处理这些不同类型的换行符时,必须格外小心以确保代码的可移植性。 下面是解析PHP处理换行符的步骤: 1. 使用PHP提供的常量 PHP提供了两个常量在不同操作系统中处理换行符,分别是PH…

    PHP 2023年5月26日
    00
  • windows下开发并编译PHP扩展的方法

    在Windows下开发和编译PHP扩展,需要进行以下步骤: 1. 安装Visual Studio 在Windows下进行PHP扩展开发,需要一个编译器来编译C代码,而Visual Studio是一个流行的C/C++编译器,可以在官网下载并安装Visual Studio Community版本(https://visualstudio.microsoft.co…

    PHP 2023年5月23日
    00
  • 如何动态查看及加载PHP扩展

    动态查看和加载PHP扩展是PHP开发中非常重要的一部分,本文将介绍如何动态查看及加载PHP扩展。 查看可用的扩展 首先,我们需要查看已经安装在系统中的PHP扩展。执行以下命令可以查看当前PHP扩展信息: php -m 该命令将列出所有已安装的PHP扩展。 查看扩展的详细信息 如果您想查看某一个PHP扩展的详细信息,可以使用以下命令: php -i | gre…

    PHP 2023年5月28日
    00
  • php实现网页缓存的工具类分享

    下面是详细的 “php实现网页缓存的工具类分享” 教程。 1. 背景 为了提高网站的响应速度和性能,我们可以使用缓存技术。网页缓存是在服务器端缓存生成的HTML页面,当下次客户端请求相同页面时,可以直接从缓存中读取,减少数据库或计算机资源的压力,提升网站的性能。 2. 方案 2.1 方案一:使用PHP内置函数实现网页缓存 在 PHP 中,我们可以使用 ob_…

    PHP 2023年5月27日
    00
  • 如何用PHP导出PDF

    我来详细给你描述一下如何用PHP导出PDF的完整攻略。 一、背景介绍 在web开发领域中,PDF是一种非常重要的文档格式,可以方便地打印和查看。而PHP是一种在web开发中被广泛应用的语言,因此如何使用PHP导出PDF文档成为一个非常重要的技能点。下面我将介绍如何使用PHP来生成PDF文档。 二、基本概念 在讲解如何生成PDF文档之前,我们需要了解一些基本概…

    PHP 2023年5月26日
    00
  • 微信小程序组件 marquee实例详解

    微信小程序组件 marquee实例详解 什么是marquee组件? marquee组件是微信小程序自带的一种用于文字、图片等滚动展示的UI组件,可以实现字幕、公告等效果,非常适合一些需要重点宣传或广告展示的场合。 marquee组件的基本用法 marquee组件的基本用法非常简单,以下是一个简单的使用示例: <marquee direction=&qu…

    PHP 2023年5月23日
    00
  • PHP中__set()实例用法和基础讲解

    PHP中__set()实例用法和基础讲解 1. __set() 方法 __set() 方法用于设置私有属性的值,当使用未定义或不可见的属性进行赋值时,会自动调用该方法。 public void __set ( string $name , mixed $value ) 其中,$name 表示属性名,$value 表示属性值。 2. __set() 方法的实例…

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