PHP 目录操作实战:创建、读取递归遍历与清空删除详解

Ada
Ada
发布时间:2026-10-13| 5人浏览过
原创

本文系统总结 PHP 目录操作的核心方法。涵盖 mkdir 创建、rmdir 删除及 rename 重命名等基础函数,重点演示 opendir/readdir/closedir 实现的目录遍历,以及两种递归算法用于文件结构展示与递归清空。针对 Windows/UTF-8 环境的编码差异,提供 iconv 转换方案,确保路径与内容正确处理。

基础目录操作

在进行复杂的递归处理前,掌握基础的目录增删改查是前提:

  • 新建目录:使用 mkdir($path, $mode, $recursive)。注意第三个参数设为 true 可支持级联创建多级目录。
  • 删除空目录:使用 rmdir($path)。该函数仅能删除为空或已处理的目录,删除非空目录需先清理内部内容。
  • 移动或重命名:使用 rename($old_name, $new_name),既可用于改名也可用于跨目录移动。

目录内容获取与遍历

获取目录下的文件列表主要依赖文件句柄操作,核心流程如下:

  1. 打开目录:opendir($path),返回资源类型的句柄。
  2. 读取内容:readdir($handle),依次读取文件名并自动后移指针,若读不到则返回 false。
  3. 关闭目录:closedir($handle),释放资源。

第1步:递归显示目录树状结构

目的:以缩进形式直观展示文件夹层级关系。
入口:指定起始路径与当前深度默认值。
动作:遍历当前目录,遇到子目录时增加深度参数并调用自身,同时过滤掉 . 和 .. 两个特殊引用。

<?php
showDir('../../file');
function showDir($path,$dep=0){
 $pos = opendir($path);
 while(false!==$file=readdir($pos)){
  if($file=='.'||$file=='..') continue;
  echo str_repeat(" ",$dep*4),$file.'<br>';
  if(is_dir($path.'/'.$file)){
   $func = __FUNCTION__;
   $func($path.'/'.$file,$dep+1);
  }
 }
}

运行结果效果如下图所示:

 

第2步:递归构建目录索引数组

目的:将文件系统映射为结构化数据(JSON/API 响应常用),区分文件与文件夹类型。
入口:指定路径。
动作:遍历文件,若为目录则递归调用获取其子节点数组存入 next 字段,否则标记为 file 类型。最后关闭句柄并返回完整数组。

<?php
$res = showDir('../../file');
echo '<pre>';
print_r($res);
function showDir($path){
 $pos = opendir($path);
 $next = array();
 while(false!==$file=readdir($pos)){
  if($file=='.'||$file=='..') continue;
  $fileinfo = array();
  $fileinfo['name'] = $file;
  if(is_dir($path.'/'.$file)){
   $fileinfo['type'] = 'dir';
   $func = __FUNCTION__;
   $fileinfo['next'] = $func($path.'/'.$file);
  }else{
   $fileinfo['type'] = 'file';
  }
  $next[] = $fileinfo;
 }
 closedir($pos);
 return $next;
}

生成的数组结构示意效果如下:

 

递归删除目录

风险提醒:此操作不可逆,涉及破坏性写入。生产环境中使用前务必确认路径正确,建议先备份重要数据或在测试环境验证。

思路与“构建索引”类似,但在判断是否为目录时执行逻辑不同:如果是文件,调用 unlink() 删除;所有子项处理后,再调用 rmdir() 删除当前目录本身。

<?php
showDir('../../file/sim');
function showDir($path,$dep=0){
 $pos = opendir($path);
 while(false!==$file=readdir($pos)){
  if($file=='.'||$file=='..') continue;
  if(is_dir($path.'/'.$file)){
   $func = __FUNCTION__;
   $func($path.'/'.$file,$dep+1);
  }else{
   unlink($path.'/'.$file);
  }
 }
 rmdir($path);
 closedir($pos);
}

目录文件编码问题处理

在 Windows 系统中,文件系统的默认编码通常为 GBK,而现代 Web 项目多采用 UTF-8。当读取到的文件名或路径包含中文时,直接输出或拼接路径可能会出现乱码或找不到文件的情况。此时需要进行编码转换:

展示内容编码转换

若操作系统编码为 GBK,而项目需要输出 UTF-8 格式:

$utf8_file = iconv('gbk', 'utf-8', $gbk_file);

路径编码转换

若代码中定义的字符串路径为 UTF-8,但需要传入给识别 GBK 的系统函数:

$gbk_path = iconv('utf-8', 'gbk', $utf8_path);

以上就是 PHP 目录操作的详细内容,更多关于 PHP 目录管理技巧的资料请关注本站其它相关文章!

相关标签:

免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。

Python 相关产品和应用

全部下载
Selenium

Selenium

4.51.0 · Windows

用于浏览器自动化和 Web 测试的 Python 工具。

scikit-learn

scikit-learn

1.9.1 · Windows

常用 Python 机器学习算法与模型评估工具库。

Black

Black

26.10.1 · Windows

强调一致性的 Python 自动代码格式化工具。

Ruff

Ruff

0.17.1 · macOS

由 Rust 编写的高速 Python 代码检查和格式化工具。

pytest

pytest

9.1.1 · Windows

简洁而强大的 Python 自动化测试框架。

FastAPI

FastAPI

0.146.0 · Windows

高性能 Python API 框架,支持类型提示和自动接口文档。

Flask

Flask

3.1.3 · Windows

轻量灵活的 Python Web 应用框架。

Django

Django

6.1.2 · Windows

成熟的 Python Web 框架,适合构建内容站点和业务系统。

Spyder

Spyder

6.1.7 · Windows

面向科学计算与数据分析的 Python 集成开发环境。

SciPy

SciPy

1.18.1 · Windows

面向科学、工程和技术计算的 Python 算法库。