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

本文介绍如何使用PHP进行文件夹的基本操作,包括递归遍历文件夹以读取所有文件及子文件夹、计算文件夹的总大小、删除指定的文件夹及其内容、以及复制整个文件夹的内容。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

读取文件夹 : 

<?php
/**
 * 使用递归遍历读取文件和文件夹
 */
header("content-type:text/html;charset=utf-8");

$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);
?>

获取文件夹的大小

<?php
/**
 * 使用递归遍历获取文件夹的大小
 */
header("content-type:text/html;charset=utf-8");

$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
/**
 * PHP删除目录、复制目录和移动目录
 */
header("content-type:text/html;charset=utf-8");

$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

/**
 * PHP删除目录、复制目录和移动目录
 */
header("content-type:text/html;charset=utf-8");

$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);

?>


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值