码迷,mamicode.com
首页 > Web开发 > 详细

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

时间:2016-04-09 23:35:28      阅读:189      评论:0      收藏:0      [点我收藏+]

标签:

(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()关闭目录,并且确保在计算机中也退出了该目录,再进行删除的操作。

 

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

标签:

原文地址:http://www.cnblogs.com/mozshaw/p/5372895.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!