Размер файлов по-русски
13 ноября 2011 г.
Функция принимает количество байт и отдает на его основе размер примерно в таком же виде, как в ОС Windows.
function ru_size($bytes)
{
if(!function_exists('num_word')) { function num_word($n,$a,$b,$c,$m=1){$n=sprintf("%.0f",$n);$x=abs($n>9?mb_substr($n,-2):$n);return($m?($m==2?number_format($n,0,' ',' '):$n).' ':'').(($x%=100)>9&&$x<20||($x%=10)>4||$x==0?$c:($x==1?$a:$b));} }
if(!$bytes) return '0 байт';
elseif($bytes<1000) return num_word($bytes,'байт','байта','байт');
elseif($bytes<1012) return '0,98 КБ';
elseif($bytes<1024) return '0,99 КБ';
elseif($bytes<1048576)
{
$temp = round($bytes/1024,2);
if($temp<10) return str_replace('.',',',round($temp,2)).' КБ';
elseif($temp<100) return str_replace('.',',',round($temp,1)).' КБ';
elseif($temp<1000) return round($temp).' КБ';
elseif($temp<1012) return '0,98 МБ';
else return '0,99 МБ';
}
elseif($bytes<1073741824)
{
$temp = round($bytes/1048576,2);
if($temp<10) return str_replace('.',',',round($temp,2)).' МБ';
elseif($temp<100) return str_replace('.',',',round($temp,1)).' МБ';
elseif($temp<1000) return round($temp).' МБ';
elseif($temp<1012) return '0,98 ГБ';
else return '0,99 ГБ';
}
elseif($bytes<1099511627776)
{
$temp = round($bytes/1073741824,2);
if($temp<10) return str_replace('.',',',round($temp,2)).' ГБ';
elseif($temp<100) return str_replace('.',',',round($temp,1)).' ГБ';
elseif($temp<1000) return round($temp).' ГБ';
elseif($temp<1012) return '0,98 ТБ';
else return '0,99 ТБ';
}
else
{
$temp = round($bytes/1099511627776,2);
if($temp<10) return str_replace('.',',',round($temp,2)).' ТБ';
elseif($temp<100) return str_replace('.',',',round($temp,1)).' ТБ';
else return round($temp).' ТБ';
}
}
Дробную часть у чисел отделяет запятая, как и принято в русском языке. Словоформы
байт и
байта подбираются правильно. Если значение приближено к большей единице, возможны варианты
0,98
или
0,99
. Рабочий диапазон единиц — от байта до терабайта.