一.php递归实现获取目录下所有文件数量

  1. PHP
    $dirn = 0;
    $filen = 0;
    function getdirnum($file){
        global $dirn;
        global $filen;
        $dir = opendir($file);
        while($filename = readdir($dir)){
            if($filename !='.' && $filename !='..'){
                $filename = $file."/".$filename;
                if(is_dir($filename)){
                    $dirn++;
                    getdirnum($filename);
                }else{
                    $filen++;
                }
            }
        }
    }
    $file = '../phpMyAdmin/';
    getdirnum($file);
    echo '目录总数:'.$dirn;
    echo '<br>';
    echo '文件总数:'.$filen;

二.php递归实现遍历目录下所有文件总大小

  1. PHP
    function getfilesize($file){
        $size = 0;
        $dir = opendir($file);
        while($filename = readdir($dir)){
            if($filename !='.' && $filename !='..'){
                $filename = $file."/".$filename;
                if(is_dir($filename)){
    
                   $size += getfilesize($filename);
                }else{
                    $size += filesize($filename);
                }
            }
        }
        return $size;
    }
    function get_file_size($size){
        if($size>pow(2,40)){
            $s = $size/pow(2,40);
            $ext = 'TB';
        }else if($size>pow(2,30)){
            $s = $size/pow(2,30);
            $ext = 'GB';
        }else if($size>pow(2,20)){
            $s = $size/pow(2,20);
            $ext = 'MB';
    
        }else if($size>pow(2,10)){
            $s = $size/pow(2,10);
            $ext = 'KB';
    
        }else{
            $s = $size;
            $ext = 'btye';
        }
        return number_format($s,2).$ext;
    }
    echo 'phpMyAdmin文件大小为:'.get_file_size(getfilesize($file));

三.php递归创建多级目录

  1. PHP
    function mkDirs($path){
        if(is_dir($path)){//已经是目录了就不用创建
            return true;
        }
        if(is_dir(dirname($path))){//父目录已经存在,直接创建
            return mkdir($path);
        }
        mkDirs(dirname($path));//从子目录往上创建
        return mkdir($path);//因为有父目录,所以可以创建路径
    }
    mkDirs('a/b/c/');
  2. PHP
    function mkdirs($path){
         return is_dir(dirname($path))||mkdirs(dirname($path))?mkdir($path):false;
    }
    $path = "./a/b/c";
    mkdirs($path);

四.递归删除多级目录

PHP
function del($dirname)
{
    if (!file_exists($dirname)) {
        die('文件不存在');
    }
    if (is_file($dirname)) {
        unlink($dirname);
    }
    $dir = opendir($dirname);
    while ($filename = readdir($dir)) {
        if ($filename != '.' && $filename != '..') {
            $filename = $dirname . "/" . $filename;
            if (is_dir($filename)) {
                del($filename);
            } else {
                unlink($filename);
            }
        }
    }
    closedir($dir);
    rmdir($dirname);
}

$dirname = './phpMyAdmin';
del($dirname)