PHP-递归扫描目录和删除目录

(1) 通过递归扫描目录并打印

// php递归扫描目录
function scanMyDir($path){
    // 打开目录
    $dh = opendir($path);
    echo '<ul>';
    // 循环读取目录
    while(($file = readdir($dh)) !== false){
        // 先要过滤掉当前目录'.'和上一级目录'..'
        if($file == '.' || $file == '..') continue;
        // 为了能够显示中文目录/文件,需要进行转码
        echo '<li>'.iconv('gbk','utf-8',$file).'</li>';
        // 如果该文件仍然是一个目录,进入递归
        if(is_dir($path.'/'.$file)){
            scanMyDir($path.'/'.$file);
        }
    }
    echo '</ul>';
}
$path = 'e:/Music';
scanMyDir($path);

需要注意的地方:

①在读取目录的时候,会读取.和..,分别表示当前目录和上一级目录,需要过滤掉它们以进行后续的打印和操作。

②中文操作系统默认的编码是gbk,因此目录与文件的编码为gbk。想要在网页上显示的时候没有乱码,需要通过iconv函数进行转码。

③这一份代码是用无序列表来显示目录结构的。还有一种办法:可以添加一个递归深度$deep作为函数的参数,默认为0,每一次递归加1。这样不同的层级就拥有了不同的递归深度,通过str_repeat()函数来利用递归深度,就能让目录结构分出层次了。

(2) 通过递归删除目录及目录下的文件

 

// php递归删除目录和文件
function delAll($path){
    // 打开目录
    $dh = opendir($path);
    // 循环读取目录
    while(($file = readdir($dh)) !== false){
        // 过滤掉当前目录'.'和上一级目录'..'
        if($file == '.' || $file == '..') continue;
        // 如果该文件是一个目录,则进入递归
        if(is_dir($path.'/'.$file)){
            delAll($path.'/'.$file);
        } else {
            // 如果不是一个目录,则将其删除
            unlink($path.'/'.$file);
        }
    }
    // 退出循环后(此时已经删除所有了文件),关闭目录并删除
    closedir($dh);
    rmdir($path);
}
$path = './test';
delAll($path);

 

需要注意的一点是:只有当这个目录不是工作状态的时候,才能进行删除。所以必须要先通过closedir()关闭目录,并且确保在计算机中也退出了该目录,再进行删除的操作。

 

转载于:https://www.cnblogs.com/mozshaw/p/5372895.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值