В этой заметке приведены две функции:
- для превращения размера в байтах в кило-, мега-, гига- и терабайты.
- для конвертации «человеческого» представления размеров файлов (н-р 10 MB, 200.20 GB) в байты
Функция formatBytes() принимает в качестве входных параметров число байт и точность округления (число знаков после запятой, по умолчанию 2), определяет размерность в «человеческом» представлении и возвращает строку типа «200.20 GB»
function formatBytes($bytes, $precision = 2)
{
$units = array('B', 'KB', 'MB', 'GB', 'TB');
$bytes = max($bytes, 0);
$pow = floor(($bytes ? log($bytes) : 0) / log(1024));
$pow = min($pow, count($units) - 1);
$bytes /= pow(1024, $pow);
return round($bytes, $precision) . ' ' . $units[$pow];
}
Функция filesize2bytes() принимает в качестве входных параметров строку вида, например, 200.20 GB и возвращает соответствующее число байт.
function filesize2bytes($str)
{
$bytes = 0;
$bytes_array = array(
'B' => 1,
'KB' => 1024,
'MB' => 1024 * 1024,
'GB' => 1024 * 1024 * 1024,
'TB' => 1024 * 1024 * 1024 * 1024,
'PB' => 1024 * 1024 * 1024 * 1024 * 1024,
);
$bytes = floatval($str);
if (preg_match('#([KMGTP]?B)$#si', $str, $matches) && !empty($bytes_array[$matches[1]])) {
$bytes *= $bytes_array[$matches[1]];
}
$bytes = intval(round($bytes, 2));
return $bytes;
}