php入门

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

2017-12-07  本文已影响1人  天承本草2020

删除目录

  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);
上一篇下一篇

猜你喜欢

热点阅读