文件系统处理(二)

2、统计目录大小
思路:
(1)指定路径是否存在
(2)指定路径是否是目录
(3)判断目录下文件是否是目录,累加文件大小
实现方法:

    function getDirSize($dir){
        //累计目录大小
        $dir_size = 0;

        //判断路径文件或目录是否存在
        if(file_exists($dir)){

            //判断指定路径是否是目录
            if(is_dir($dir)){

                //打开目录
                $dir_handle = opendir($dir);
                //遍历目录中文件
                while($filename = readdir($dir_handle)){
                    //剔除目录中的.和..文件夹
                    if($filename != "." && $filename != ".."){
                        $subfile = $dir . "/" . $filename;

                        //目录中文件是普通文件
                        if(is_file($subfile)){
                            $dir_size += filesize($subfile);
                        }

                        //目录中文件是目录,递归计算大小
                        if(is_dir($subfile)){
                            $dir_size += getDirSize($subfile);
                        }
                    }
                }
                closedir($dir_handle);
                $res = $dir . "目录大小为:" . round($dir_size/pow(1024, 1), 2) . "KB"; 
            }else{
                $res = "指定路径指向普通文件,其大小是" . filesize($dir) . "B";
            }
        }else{
            $res = "请检查指定目录是否存在";
        }
        return $res;
    }
    echo getDirSize("test.php")."<br/>";#指定路径指向普通文件,其大小是2055B
    echo getDirSize("example1")."<br/>";#请检查指定目录是否存在
    echo getDirSize("example");#example目录大小为:9.92KB

3、建立和删除目录
PHP中,使用mkdir()函数即可创建一个新目录;使用rmdir()函数删除指定的目录。
删除目录步骤:
(1)判断指定路径是否存在;
(2)判断指定路径文件类型;
(3)如果文件类型是目录,遍历目录中文件,逐个删除,如果目录中文件是文件夹,使用递归删除。
自定义删除目录方法如下,

/*
 * 删除传入的路径文件
 * @param $dir 待删除的文件路径
 */
    function delDir($dir){
        //判断路径文件是否存在
        if(file_exists($dir)){
            //判断路径文件是否是普通文件
            if(is_file($dir)){
                unlink($dir);
            }

            //判断路径文件是否是目录文件
            if(is_dir($dir)){
                //打开目录
                $dir_handle = opendir($dir);
                //遍历目录中文件
                while($filename = readdir($dir_handle)){
                    if($filename != "." && $filename != ".."){
                        $subfile = $dir . "/" . $filename;
                        if(is_file($subfile)){
                            unlink($subfile);
                        }
                        if(is_dir($subfile)){
                            delDir($subfile);
                        }
                    }
                }
                closedir($dir_handle);
                //删除空目录
                rmdir($dir);
            }
            $res = "指定路径文件删除成功";
        }else{
            $res = "指定路径文件不存在";
        }
        echo $res;
    }
    delDir('example');

4、复制目录
php提供了copy()函数,用于复制普通文件。没有专门的函数用于复制目录。

    /*
     * 复制目录
     * @param $dirSrc 被复制的目录
     * @param $dirTo 复制到的目录
    */
    function copyDir($dirSrc, $dirTo){
        //判断被复制参数是否存在
        if(!file_exists($dirSrc)){
            exit("被复制文件不存在");
        }

        //判断被复制文件是否是目录
        if(!is_dir($dirSrc)){
            exit("被复制文件不是目录");
        }

        //判断目标文件是否存在
        if(!file_exists($dirTo)){
            mkdir($dirTo);
            if(!is_dir($dirTo)){
                echo "目标文件不是目录";
                unlink($dirTo);exit;
            }
        }elseif(!is_dir($dirTo)){
            exit("目标文件不是目录");
        }

        //复制
        $dir_handle = opendir($dirSrc);
        while($filename = readdir($dir_handle)){
            if($filename != "." && $filename != ".."){
                $subfile = $dirSrc . "/" . $filename;
                if(is_file($subfile)){
                    copy($subfile, $dirTo . "/" . $filename);
                }
                if(is_dir($subfile)){
                    copyDir($subfile, $dirTo . "/" . $filename);
                }
            }
        }
        closedir($dir_handle);
    }
    copyDir("copy","example");

—-细说PHP读书笔记

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值