您的位置:永利集团登录网址 > 计算机教学 > php如何获取文件夹大小程序代码

php如何获取文件夹大小程序代码

2019-10-03 11:46

 代码如下

一、删除目录及目录下的所有文件

大致程序思想就是使用递规来计算目录占用空间多少, 然后再把这个占用空间的值写进文本文件里, 那么只要访问这个txt文件就知道占用了多少空间, 不用频繁获取而读磁盘, 节省资源. 每次用户如果上传的文件或者删除了文件, 那么又重新进行统计. 当然, 也可以把统计结果保存到数据库里.

<?php
 
//获取文件夹大小
function dir_size($dir) {
    if (!preg_match('#/$#', $dir)) {
        $dir .= '/';
    }
    $totalsize = 0;
    //调用文件列表
    foreach (get_file_list($dir) as $name) {
        $totalsize += (@is_dir($dir.$name) ? dir_size("$dir$name/") :
            (int)@filesize($dir.$name));
    }
    return $totalsize;
}
 
//获取文件列表
function get_file_list($path) {
    $f = $d = array();
    //获取所有文件
    foreach (get_all_files($path) as $name) {
        if (@is_dir($path.$name)) {
            $d[] = $name;
        } else if (@is_file($path.$name)) {
            $f[] = $name;
        }
    }
    natcasesort($d);
    natcasesort($f);
    return array_merge($d, $f);
}
 
//获取所有文件
function get_all_files($path) {
    $list = array();
    if (($hndl = @opendir($path)) === false) {
        return $list;
    }
    while (($file=readdir($hndl)) !== false) {
        if ($file != '.' && $file != '..') {
            $list[] = $file;
        }
    }
    closedir($hndl);
    return $list;
}
 
//转换单位
function setupSize($fileSize) {
    $size = sprintf("%u", $fileSize);
    if($size == 0) {
        return("0 Bytes");
    }
    $sizename = array(" Bytes", " KB", " MB", " GB", " TB", " PB", " EB", " ZB", " YB");
    return round($size/pow(1024, ($i = floor(log($size, 1024)))), 2) . $sizename[$i];
}
 
//目录
$path = './test_dir/';
 
//显示文件列表
print_r(get_file_list($path)).'<br>';
 
//显示文件大小
echo dir_size($path).'<br>';
 
//显示转换过单位的大小
echo setupSize(dir_size($path));
 
?>

function delDirAndFile( $dirName )

复制代码 代码如下:

dir_size() 是获取文件夹大小的函数,函数中使用了递归的方法,此函数需要调用 get_file_list() ,获取文件夹中的所有文件列表,如果文件列表中有文件夹存在,就调用 get_all_files() 获取文件夹下的文件列表。由此取得目标文件夹的大小。

{

function countDirSize($dir)
{
$handle = opendir($dir);
while (false!==($FolderOrFile = readdir($handle)))
{
if($FolderOrFile != "." && $FolderOrFile != "..")
{
if(is_dir("$dir/$FolderOrFile")) {
$sizeResult += getDirSize("$dir/$FolderOrFile");
} else {
$sizeResult += filesize("$dir/$FolderOrFile");
}
}
}
closedir($handle);
return $sizeResult;
}

setupSize() 是将传人的大小转换为易于读取的文件单位,可以转换成 Bytes, KB, MB, GB, TB, PB, EB, ZB, YB 等单位。

if ( $handle = opendir( "$dirName" ) ) {

把字节转换为正常的K啊M啊之类的函数:

列2

while ( false !== ( $item = readdir( $handle ) ) ) {

复制代码 代码如下:

 代码如下

if ( $item != "." && $item != ".." ) {

function get_real_size($size) {

<?php

if ( is_dir( "$dirName/$item" ) ) {

$kb = 1024; // Kilobyte
$mb = 1024 * $kb; // Megabyte
$gb = 1024 * $mb; // Gigabyte
$tb = 1024 * $gb; // Terabyte

function getDirSize($dir)
    {
        $handle = opendir($dir);
        while (false!==($FolderOrFile = readdir($handle)))
        {
            if($FolderOrFile != "." && $FolderOrFile != "..")
            {
                if(is_dir("$dir/$FolderOrFile"))
                {
                    $sizeResult += getDirSize("$dir/$FolderOrFile");
                }
                else
                {
                    $sizeResult += filesize("$dir/$FolderOrFile");
                }
            }   
        }
        closedir($handle);
        return $sizeResult;
    }

delDirAndFile( "$dirName/$item" );

if($size < $kb) {
return $size." B";
}else if($size < $mb) {
return round($size/$kb,2)." KB";
}else if($size < $gb) {
return round($size/$mb,2)." MB";
}else if($size < $tb) {
return round($size/$gb,2)." GB";
}else {
return round($size/$tb,2)." TB";
}
}

    // 单位自动转换函数
    function getRealSize($size)
    {
        $kb = 1024;         // Kilobyte
        $mb = 1024 * $kb;   // Megabyte
        $gb = 1024 * $mb;   // Gigabyte
        $tb = 1024 * $gb;   // Terabyte
       
        if($size < $kb)
        {
            return $size." B";
        }
        else if($size < $mb)
        {
            return round($size/$kb,2)." KB";
        }
        else if($size < $gb)
        {
            return round($size/$mb,2)." MB";
        }
        else if($size < $tb)
        {
            return round($size/$gb,2)." GB";
        }
        else
        {
            return round($size/$tb,2)." TB";
        }
    }

} else {

用法很简单:

    echo getRealSize(getDirSize(dirname($_SERVER[SCRIPT_FILENAME])./include/));

if( unlink( "$dirName/$item" ) )echo "成功删除文件: $dirName/$item

复制代码 代码如下:

?>

n”;

$size_zip=countDirSize("../zip/");
$size_zip=get_real_size($size_zip);

#########################################################

}

就这么简单了,呵呵。

//function dirsize($dir)
//{
//   $handle=opendir($dir);
//   $size = 0;
//   while ( $file=readdir($handle) )
//   {
//       if ( ( $file == "." ) || ( $file == ".." ) ) continue;
//       if ( is_dir("$dir/$file") )
//           $size += dirsize("$dir/$file");
//       else
//           $size += filesize("$dir/$file");
//   }
//   closedir($handle);
//   return $size;
//}
//$big=dirsize(dirname($_SERVER[SCRIPT_FILENAME])."/");
//echo $big;

}

复制代码 代码如下:

得到的结果是小数点后两位的

}

<?
/**
* File: fetch user directory use size
* Author: heiyeluren <heiyeluren_AT_gmail_com>
* Create: 2005-9-19 16:20
* Modifed: 2005-9-19 16:41
*/

$big*1024 得到单位为KB

closedir( $handle );

/*** 基本函数 ***/

if( rmdir( $dirName ) )echo “成功删除目录: $dirName

//计算目录大小
function countDirSize(dir)
{
handle = opendir(dir);
while (false!==(FolderOrFile = readdir(handle)))
{
if(FolderOrFile != "." && FolderOrFile != "..")
{
if(is_dir("dir/FolderOrFile")) {
sizeResult += getDirSize("dir/FolderOrFile");
} else {
sizeResult += filesize("dir/FolderOrFile");
}
}
}
closedir(handle);
return sizeResult;
}

n”;

//保存用户文件大小
function saveDirSize(userDir)
{
userDirSize = countDirSize(userDir);
if (!fp = fopen(userDir."/dir_size.txt", "w+")) {
die("Open file failed");
} else {
fwrite(fp, dirSize);
}
}

}

//获取用户目录的大小
function getDirSize(userDir)
{
user = addslashes(userDir);
sizeFile = userDir."/dir_size.txt";
if (!fp = fopen(sizeFile, "r") {
return 0;
} else {
dirSize = fread(fp, filesize(sizeFile));
}
return dirSize;
}
/*** 调用实例 ***/
user = "heiyeluren";
userPath = "./user/".user;

}

//如果用户执行了删除或者上传文件的操作就重新获取目录大小
if (action == "upload" || action == "delete") {
saveDirSize(userPath);
}

二、仅删除目录下的文件,不删除目录

userDirSize = getDirSize(userPath)/1024;
echo "用户: ".user;
echo "占用空间: ".userDirSize;
?>

function delFile($dirName){

您可能感兴趣的文章:

  • PHP统计目录大小的自定义函数分享
  • PHP遍历目录并返回统计目录大小
  • 用PHP来计算某个目录大小的方法
  • php遍历目录方法小结
  • php实现遍历目录并删除指定文件中指定内容
  • PHP使用glob函数遍历目录或文件夹的方法
  • php无限遍历目录示例
  • php计算整个目录大小的方法

if(file_exists($dirName) && $handle=opendir($dirName)){

while(false!==($item = readdir($handle))){

if($item!= "." && $item != ".."){

if(file_exists($dirName.'/'.$item) && is_dir($dirName.'/'.$item)){

delFile($dirName.'/'.$item);

}else{

if(unlink($dirName.'/'.$item)){

return true;

}

}

}

}

closedir( $handle);

}

}

三、定时删除

<?php

$flag = 1; //将执行标志设置为1,默认为执行

ignore_user_abort(); //客户端断开时,可以让脚本继续在后台执行

set_time_limit(0); //忽略php.ini设置的脚本运行时间限制

$interval = 5*60; //设置执行周期,单位为秒,5分钟为 5*60=300

do{

$flagfile = "flag.txt"; //标志放置在文件“flag.txt”中。“0”表示停止执行,“1”表示继续执行

if(file_exists($flagfile) && is_readable($flagfile)) { //读取文件内容

$fh = fopen($flagfile,"r");

while (!feof($fh)) {

$flag = fgets($fh); //存储标志

}

fclose($fh);

}

$dir = "temp/"; //你的临时目录位置

$handle=opendir("{$dir}/");

while (false !== ($file=readdir($handle))) {

if ($file!="." && $file!=".." && !is_dir("{$dir}/{$file}")) {

@unlink ("{$dir}/{$file}");

}

}

closedir($handle); //关闭由 opendir() 函数打开的目录

sleep($interval); //执行一个周期后,休眠$interval时间,休眠结束后脚本继续执行

}while($flag);

友情提示:请在本地环境测试!

四、创建文件夹

mkdir("文件夹路径",0700);

五、列出目录和文件

if ($handle = opendir('./')) {//指定当前目录

  while (false !== ($file = readdir($handle))) {//循环读取目录下的文件

      echo "$file<br />";

  }

  closedir($handle);//关闭目录流

}

六、磁盘空间

function dir_size($dir) {

@$dh = opendir($dir);//打开目录,返回一个目录流

$size = 0;//初始大小为0

while ($file = @readdir($dh)) {//循环读取目录下的文件

if ($file != "." and $file != "..") {//如果返回的不是本目录(.)或者上级目录(..)

$path = $dir."/".$file;//设置目录,用于含有子目录的情况

if (is_dir($path)) {//如果是目录文件

echo "$path<br />";

$size += dir_size($path);//递归调用,计算目录大小

} elseif (is_file($path)) {//如果是文件

echo "$path ". filesize($path) ." BYTE<br />";

$size += filesize($path);//计算文件大小

}

}

}

@closedir($dh);//关闭目录流

return $size;//返回大小

}

$dir = ".";//指定文件所在的目录

$dir_size = dir_size("$dir");//计算目录大小

echo "总大小:". $dir_size ." BYTE";

七、改变目录和文件的属性

chmod("test.txt",0755);

本文由永利集团登录网址发布于计算机教学,转载请注明出处:php如何获取文件夹大小程序代码

关键词:

  • 上一篇:没有了
  • 下一篇:没有了