PHP 之递归遍历目录与删除

/**
 * @Description: 递归查询目录文件
 * @Author: Yang
 * @param $path
 * @param int $level
 * @return array
 */
function listDirs($path, $level = 0)
{
    $dir_handle = opendir($path);
    static $tree = array();
    while (false !== $file = readdir($dir_handle)) {
        if ($file == '.' || $file == '..') continue;
        $fileInfo["fileName"] = $file;
        $fileInfo["level"] = $level;
        $tree[] = $fileInfo;
        //判断当前是否为目录
        if (is_dir($path . '/' . $file)) {
            //是目录
            listDirs($path . '/' . $file, $level+1);
        }
    }
    closedir($dir_handle);
    return $tree;
}

$list = listDirs("D:\\wwwroot\\www.phpdemo.com");
foreach ($list as $k => $v) {
    echo "|--".str_repeat("--", $v['level']*2).$v['fileName']."<br>";
}

运行结果如下:

/**
 * @Description: 递归删除目录文件
 * @Author: Yang
 * @param $path
 * @return bool
 */
function removeDirs($path)
{
    $dir_handle = opendir($path);
    while (false !== $file = readdir($dir_handle)) {
        if ($file == '.' || $file == '..') continue;
        //判断当前是否为目录
        if (is_dir($path . '/' . $file)) {
            //是目录
            removeDirs($path . '/' . $file);
        }else{
            @unlink($path . '/' . $file);
        }
    }
    closedir($dir_handle);
    return @rmdir($path);
}

 

/**
 * 递归创建目录
 * @param $path 路径
 * @return bool
 */
function mkdirs($path) {
    if (!is_dir($path)) {
        mkdirs(dirname($path));
        mkdir($path);
    }
    return is_dir($path);
}

 

/**
 * 递归删除目录
 * @param $path 删除路径
 * @param bool $clean
 * @return bool
 */
function rmdirs($path, $clean = false) {
    if (!is_dir($path)) {
        return false;
    }
    $files = glob($path . '/*');
    if ($files) {
        foreach ($files as $file) {
            is_dir($file) ? rmdirs($file) : @unlink($file);
        }
    }
    return $clean ? true : @rmdir($path);
}

 

posted @ 2019-01-28 23:17  样子2018  阅读(352)  评论(0编辑  收藏  举报