欢迎光临
我们一直在努力

PHP使用递归读取文件和文件夹 – 得到文件夹内大小

读取文件夹 :

/**
 * 使用递归遍历读取文件和文件夹
 */
$dirname = "test";
function listdir($dirname){
    $ds = opendir($dirname);    //创建一个目录资源, 传入的目录就是资源
    while($file = readdir($ds)){    //从目录中读取条目
        //这里的$path 表示这个路径下的文件夹,如果不这么去定义,里边执行递归语句的时候,找不到是那个文件夹
        $path = $dirname."/".$file;

        //判断,如果是 . 或者 ..的目录就过滤掉
        if($file != "." && $file != ".."){
            if(is_dir($path)){              //判断如果找到的是目录
                echo "目录 : ".$file."<br>";  //就打印出找到的文件名
                listdir($path);  //如果得到是文件夹,然后递归调用一次方法传入的$path文件夹路径就是判断得到的文件夹赋值给$dirname
            }else{
                echo "文件 : ".$file."<br>";  //否则就找到打印的文件夹名
            }

        }
    }
}
listdir($dirname);

获取文件夹的大小

/**
 * 使用递归遍历获取文件夹的大小
 */
$dirname = "test2";
function totdir($dirname){
    static $tot;    //这里把$tot定义为静态的,表示$tot全局只有这一个变量
    $ds = opendir($dirname);    //创建一个目录资源, 传入的目录就是资源
    while($file = readdir($ds)){    //从目录中读取到条目
        //这里的$path 表示这个路径下的文件夹,如果不这么去定义,里边执行递归语句的时候,找不到是那个文件夹
        $path = $dirname."/".$file;

        //判断,如果是 . 或者 ..的目录就过滤掉
        if($file != "." && $file != ".."){
            if(is_dir($path)){              //判断如果找到的是目录
                totdir($path);  //如果得到是文件夹,然后递归调用一次方法传入的$path文件夹路径就是判断得到的文件夹赋值给$dirname
            }else{
                $tot += filesize($path);
            }
        }
    }
    return $tot." bytes";
}
echo totdir($dirname);

删除目录 :

/**
 * PHP删除目录、复制目录和移动目录
 */

$dirname = "test";  //目录路径
function deldir($dirname){
    $ds = opendir($dirname);    //创建一个目录资源, 传入的目录就是资源
    while($file = readdir($ds)){    //从目录中读取到条目
        //这里的$path 表示这个路径下的文件夹,如果不这么去定义,里边执行递归语句的时候,找不到是那个文件夹
        $path = $dirname."/".$file;

        //判断,如果是 . 或者 ..的目录就过滤掉
        if($file != "." && $file != ".."){
            if(is_dir($path)){             //判断如果找到的是目录
                deldir($path);
            }else{
                unlink($path);
            }
        }
    }
    closedir($ds); //关闭目录资源
    return rmdir($dirname);
}
var_dump(deldir($dirname));

复制目录 :

/**
 * PHP删除目录、复制目录和移动目录
 */
$srcDir = "test";  //目录路径
$dstDir = "test2";  //目录路径
function copydir($srcDir,$dstDir){
    if(!is_dir($dstDir)){   //这里判断一下目标路径是否存在,不存在则创建
        mkdir($dstDir); //创建目标路径
    }
    $ds = opendir($srcDir);    //创建一个目录资源, 传入的目录就是资源

    while($file = readdir($ds)){    //从目录中读取到条目
        //这里的$path 表示这个路径下的文件夹,如果不这么去定义,里边执行递归语句的时候,找不到是那个文件夹
        $path = $srcDir."/".$file;  //这里的 $file表示的是 test下的条目.所以使用的时候需要用绝对路径在前面加上$srcDir
        $dstpath = $dstDir."/".$file;
        //判断,如果是 . 或者 ..的目录就过滤掉
        if($file != "." && $file != ".."){
            if(is_dir($path)){             //判断如果找到的是目录
                copydir($path,$dstpath);    //如果是文件夹,那么传过去的$path就表示文件夹的绝对地址
            }else{
                copy($path,$dstpath);       //如果是文件夹,那么传过去的$path就表示文件的绝对地址
            }
        }
    }
    closedir($ds); //关闭目录资源
}
copydir($srcDir,$dstDir);

未经允许不得转载:发现未来 » PHP使用递归读取文件和文件夹 – 得到文件夹内大小

分享到:更多 ()

评论 抢沙发

评论前必须登录!

 

发现网服务 更专业 更方便

广告联系联系我们