PHP文件大小格式化函数合集
比如碰到一个很大的文件有49957289167b,大家一看这么一长串的数字后面单位是字节b,还是不知道这个文件的大小是一个什么概念,我们把它转换成gb为单位,就是46.53gb。用下面这些函数就可以完成这个工作:
//转换单位
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];
}
function byte_format($size, $dec=2){
$a = array("b", "kb", "mb", "gb", "tb", "pb");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size,$dec)." ".$a[$pos];
}
/* use : echo format_size(filesize("fichier"));
example result : 13,37 ko */
function format_size($o) {
$size = array('go' => 1073741824, 'mo' => 1048576, 'ko' => 1024, 'octets' => 1);
foreach ($size as $k => $v)
if ($o >= $v) {
if ($k == 'octets')
return round($o).' '.$k;
return number_format($o / $v, 2, ',', ' ').' '.$k;
}
}
/**
* 文件大小格式化
* @param integer $size 初始文件大小,单位为byte
* @return array 格式化后的文件大小和单位数组,单位为byte、kb、mb、gb、tb
*/
function file_size_format($size = 0, $dec = 2) {
$unit = array("b", "kb", "mb", "gb", "tb", "pb");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
$result['size'] = round($size, $dec);
$result['unit'] = $unit[$pos];
return $result['size'].$result['unit'];
}
echo file_size_format(123456789);
/**
* 文件大小单位格式化
* @param $bytes 文件实际大小,单位byte
* @param $prec 转换后精确度,默认精确到小数点后两位
* @return 转换后的大小+单位的字符串
*/
function fsizeformat($bytes,$prec=2){
$rank=0;
$size=$bytes;
$unit="b";
while($size>1024){
$size=$size/1024;
$rank++;
}
$size=round($size,$prec);
switch ($rank){
case "1":
$unit="kb";
break;
case "2":
$unit="mb";
break;
case "3":
$unit="gb";
break;
case "4":
$unit="tb";
break;
default :
}
return $size." ".$unit;
}
/**
* 容量格式化
* @param string 文件名(文件路径)
* @return 如果文件存在返回格式化的字符串 如果错误返回错误信息 unknown file
*/
function sizeformat ($filename){
//获取文件的大小
@ $filesize=filesize($filename);
//如果文件不存在返回错误信息
if(false==$filesize){
return 'unknown file';
}
//格式化文件容量信息
if ($filesize >= 1073741824) $filesize = round($filesize / 1073741824 * 100) / 100 . ' gb';
elseif ($filesize >= 1048576) $filesize = round($filesize / 1048576 * 100) / 100 . ' mb';
elseif ($filesize >= 1024) $filesize = round($filesize / 1024 * 100) / 100 . ' kb';
else $filesize = $filesize . ' bytes';
return $filesize;
}
//测试函数
echo sizeformat('config.inc.php');
/**
* 文件大小格式化
* @param type $filesize
*/
private function sizecount($filesize)
{
if ($filesize >= 1073741824) {
$filesize = round($filesize / 1073741824 * 100) / 100 . ' gb';
}
else if ($filesize >= 1048576) {
$filesize = round($filesize / 1048576 * 100) / 100 . ' mb';
}
else if ($filesize >= 1024) {
$filesize = round($filesize / 1024 * 100) / 100 . ' kb';
}
return $filesize;
}
//该函数最主要的是根据文件的字节数,判断应当选择的统计单位,也就是说一个文件用某一单位比如mb,那么该文件肯定小于1gb,否则当然要用gb作为单位了,而且文件要大于kb,不然的话得用更小的单位统计。该函数代码如下
//size() 统计文件大小
function size($byte)
{
if($byte < 1024) {
$unit="b";
}
else if($byte < 10240) {
$byte=round_dp($byte/1024, 2);
$unit="kb";
}
else if($byte < 102400) {
$byte=round_dp($byte/1024, 2);
$unit="kb";
}
else if($byte < 1048576) {
$byte=round_dp($byte/1024, 2);
$unit="kb";
}
else if ($byte < 10485760) {
$byte=round_dp($byte/1048576, 2);
$unit="mb";
}
else if ($byte < 104857600) {
$byte=round_dp($byte/1048576,2);
$unit="mb";
}
else if ($byte < 1073741824) {
$byte=round_dp($byte/1048576, 2);
$unit="mb";
}
else {
$byte=round_dp($byte/1073741824, 2);
$unit="gb";
}
$byte .= $unit;
return $byte;
}
//辅助函数 round_up(),该函数用来取舍小数点位数的,四舍五入。
function round_dp($num , $dp)
{
$sh = pow(10 , $dp);
return (round($num*$sh)/$sh);
}
这样我们就能很好额统计任何一个文件的大小了,首先通过系统自带的filesize()函数获得文件的字节数,再用上面的这些函数换算成适当的单位就可以了
上一篇: 详解PHP中strlen和mb_strlen函数的区别
下一篇: php GUID生成函数和类