为了实现遍历文件夹的功能,可以使用PHP提供的目录迭代器(DirectoryIterator)、文件迭代器(FilesystemIterator)和递归函数等方式。
为了实现遍历文件夹的功能,可以使用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实现遍历文件夹的方法汇总


基础教程推荐
猜你喜欢
- php如何获取当前日期和星期 2024-12-06
- php生成短网址/短链接原理和用法实例分析 2023-04-20
- PHP基于反射机制实现自动依赖注入的方法详解 2022-10-02
- php+mysql开发的最简单在线题库(在线做题系统)完整案例 2023-01-04
- php去除deprecated的实例方法 2022-09-02
- PHP采用get获取url汉字出现乱码的解决方法 2024-03-28
- Laravel修改验证提示信息为中文的示例 2023-03-08
- PHP字符串函数系列之nl2br(),在字符串中的每个新行 (\n) 之前插入 HTML 换行符br 2024-03-28
- Laravel 解决composer相关操作提示php相关异常的问题 2023-03-08
- PHP laravel使用自定义邮件类实现发送邮件 2023-07-03