获取文件夹大小并且显示为易于读取的文件单位

获取文件夹大小并格式化

在获取文件夹中的包含文件时使用了递归的方法,依次取得下级文件和文件夹的大小,然后将返回的大小格式化为易于读取的单位。

<?php
// 说明: 获取文件夹大小并且显示为易于读取的文件单位
// 整理:http://www.CodeBit.cn

//获取文件夹大小
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));

?>

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

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

摘录自 User manager for PureFTPd 的大小转换函数

PureFTPd 是 *nix 下的一个 FTP 服务器软件,而User manager for PureFTPd 则是为了方便在线管理 ftp 用户设计制作的。作者是:M.Mastenbroek。

<?php
// 说明:摘录自 User manager for PureFTPd 的大小转换函数
// 整理:http://www.CodeBit.cn

function DisplayFileSize($filesize) {
	$array = array(
		'YB' => 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024,
		'ZB' => 1024 * 1024 * 1024 * 1024 * 1024 * 1024 * 1024,
		'EB' => 1024 * 1024 * 1024 * 1024 * 1024 * 1024,
		'PB' => 1024 * 1024 * 1024 * 1024 * 1024,
		'TB' => 1024 * 1024 * 1024 * 1024,
		'GB' => 1024 * 1024 * 1024,
		'MB' => 1024 * 1024,
		'KB' => 1024,
	);
	if($filesize <= 1024)
	{
		$filesize = $filesize . ' B';
	}
	foreach($array AS $name => $size)
	{
		if($filesize > $size || $filesize == $size)
		{
			$filesize = round((round($filesize / $size * 100) / 100), 0) . ' ' . $name;
		}
	}
	return $filesize;
}

echo DisplayFileSize( 5145115 );

?>

关于 Artlover

有多年 web 开发经验,擅长领域 PHP / MySQL / CSS / Javascript / Zend Framework ,期望:在分享中共同成长。
此条目发表在 PHP 分类目录,贴了 , , , 标签。将固定链接加入收藏夹。

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*


*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>