PHP 目录操作实战:创建、读取递归遍历与清空删除详解
本文系统总结 PHP 目录操作的核心方法。涵盖 mkdir 创建、rmdir 删除及 rename 重命名等基础函数,重点演示 opendir/readdir/closedir 实现的目录遍历,以及两种递归算法用于文件结构展示与递归清空。针对 Windows/UTF-8 环境的编码差异,提供 iconv 转换方案,确保路径与内容正确处理。
基础目录操作
在进行复杂的递归处理前,掌握基础的目录增删改查是前提:
- 新建目录:使用
mkdir($path, $mode, $recursive)。注意第三个参数设为 true 可支持级联创建多级目录。 - 删除空目录:使用
rmdir($path)。该函数仅能删除为空或已处理的目录,删除非空目录需先清理内部内容。 - 移动或重命名:使用
rename($old_name, $new_name),既可用于改名也可用于跨目录移动。
目录内容获取与遍历
获取目录下的文件列表主要依赖文件句柄操作,核心流程如下:
- 打开目录:
opendir($path),返回资源类型的句柄。 - 读取内容:
readdir($handle),依次读取文件名并自动后移指针,若读不到则返回 false。 - 关闭目录:
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 目录管理技巧的资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













