美文网首页php入门
文件目录函数库(删除目录和复制目录封装)

文件目录函数库(删除目录和复制目录封装)

作者: 天承本草2020 | 来源:发表于2017-12-07 15:02 被阅读1次

    删除目录

    1. rmdir()只能删除空目录,(先将目录置空,然后再删除目录)
      1. 打开目录
      2. 读取目录
        1. 如果读取不到内容,则目录可以直接删除
        2. 如果读取到的内容是普通文件,unlinke删除
        3. 如果是目录则继续检查

    递归

    1. 具有相同的逻辑
    2. 具有明确的结束条件
     while ($byte>1024){
           $byte/=1024;
           $n++;
       }
    
    function removeDirectory($dir)
    {
        if (is_dir($dir)) {
    //       删除目录
    //       先将$dir清空,然后再删除
    //       1.清空目录
    //            1.1 打开目录
            $handler = opendir($dir);
    //            1.2 读取目录
            while (($item = readdir($handler)) !== false) {
                if ($item != "." && $item != '..') {
                    //如果读取到的内容是普通文件则直接删除
                    //注意:判断文件时,先给出正确的路径
                    $sub = $dir . DIRECTORY_SEPARATOR . $item;
                    echo $sub,"<hr>";
                    //a.txt 找不到(非法路径)
                    //a/a.txt 能找到(有效路径)
                    if (is_file($sub)) {
                        unlink($sub);
                    }
                    //如果读取到的内容是目录则继续检查...
                    if (is_dir($sub)) {
                        //先要清空b目录,然后才能删除
                        //1.打开b路径
                        //2.读取b目录
                            //2.1如果读取到普通文件则直接删除
                            //2.2如果读取到目录则继续检查...
                                //2.2.1打开
                                //2.2.2读取目录
                                //2.2.3关闭目录
    
                        //3.关闭b目录
                        removeDirectory($sub);
                    }
    
                }
            }
    //            1.3 关闭目录
            closedir($handler);
    //       2.删除目录
            rmdir($dir);
    
        }
        if (is_file($dir)) {
            unlink($dir);
    //       删除普通文件
        }
    
    }
    $dir='a';
    removeDirectory($dir);
    

    递归复制目录

    将a目录树复制为aa 目录

    1. 读取目录内容
    2. 给出正确的路径
    3. 执行函数
    //递归复制目录
    /**
     * 思路:
     * -a
     * --b
     * ---b.txt
     * --a.txt
     *
     * a=>aa
     * -aa
     * ---a.txt
     *
     * 普通文件直接使用copy($src,$dst)
     * 目录文件:
     * 1.目录不存在,则直接创建目录mkdir('aa');
     * 2.复制目录下的普通文件 a/a.txt 复制到 aa/a.txt
     * 3.复制目录下的子目录  a/b 复制到 aa/b mkdir('aa/b');
     * ....(一样的逻辑用递归)
     * @param string $src_dir 原始目录
     * @param string $dst_dir 目标目录
     */
    function copyDirectory($src_dir, $dst_dir)
    {
        if (!file_exists($src_dir)) {
            echo "原始目录不存在";
            exit;
        }
        if (!file_exists($dst_dir)) {
            mkdir($dst_dir);
        }
        //把原始目录下面的内容,复制到目标目录中
        //首先要查看原始目录中的内容
        //1.打开原始目录
        $handler = opendir($src_dir);
        //2.读取原始目录
        while (($item = readdir($handler)) !== false) {
            if ($item != "." && $item != "..") {
                //a.txt 转换成 a/a.txt 有效路径
                $source = $src_dir . DIRECTORY_SEPARATOR . $item;
                //目标路径:aa/a.txt
                $dest = $dst_dir . DIRECTORY_SEPARATOR . $item;
                //普通文件直接copy
                if (is_file($source)) {
                    //copy("a/a.txt","aa/a.txt");
                    copy($source, $dest);
                }
                //目录文件继续检查...
                if (is_dir($source)) {
                    //$source="a/b";
                    //$dest  ="aa/b";
                    //如果目标目录不存在,则创建目标目录
    //                if (!file_exists($dest)) {
    //                    //mkdir("aa/b")
    //                    mkdir($dest);
    //                }
                    //将原始($source)目录树复制到目标($dest)目录树
                    //a/b/*复制到aa/b/*
                    //1.打开 $source a/b
                    //2.读取 $source a/b
                        //a/b/b.txt
                        //2.1如果读到的内容是普通文件则,直接复制
                        //2.2如果读到的内容是目录,则继续检查...
                    //3.关闭 $source a/b
                    //a/b 复制成aa/b
                    copyDirectory($source,$dest);
                }
            }
        }
    
        //3.关闭原始目录
        closedir($handler);
    }
    $src_dir=__DIR__."/a";
    $dst_dir=__DIR__."/aa";
    copyDirectory($src_dir,$dst_dir);
    

    相关文章

      网友评论

        本文标题:文件目录函数库(删除目录和复制目录封装)

        本文链接:https://www.haomeiwen.com/subject/thgdixtx.html