为了实现遍历文件夹的功能,可以使用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创建XML接口示例 2023-01-25
- php post json参数的传递和接收处理方法 2022-10-27
- PHP实现的抓取小说网站内容功能示例 2023-01-25
- Linux系统下安装PHP7.3版本 2023-06-12
- php5.5新数组函数array_column使用 2024-01-13
- 在CentOS服务器上安装配置LEMP的详细教程 2023-12-19
- TP5(thinkPHP5)框架mongodb扩展安装及特殊操作示例 2022-11-14
- 简单谈谈PHP的垃圾回收机制 2022-10-09
- PHP大小写问题:函数名和类名不区分,变量名区分 2024-03-30
- PHP 实现字符串翻转(包含中文汉字)的实现代码 2024-03-29