У цій замітці наведено дві функції:
- для перетворення розміру в байтах у кіло-, мега-, гіга- та терабайти.
- для конвертації зрозумілого представлення розмірів файлів (наприклад, 10 MB, 200.20 GB) у байти.
Функція formatBytes()
приймає як вхідні параметри число байтів і точність округлення (кількість знаків після коми, за замовчуванням 2), визначає розмірність у «людському» форматі й повертає рядок типу «200.20 GB».
function formatBytes($bytes, $precision = 2)
{
$units = ['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;
$units = [
'B' => 1,
'KB' => 1024,
'MB' => 1024 ** 2,
'GB' => 1024 ** 3,
'TB' => 1024 ** 4,
'PB' => 1024 ** 5,
];
$bytes = floatval($str);
if (preg_match('/([KMGTP]?B)$/i', $str, $matches) && isset($units[$matches[1]])) {
$number *= $units[$matches[1]];
}
return (int) round($number, 0, PHP_ROUND_HALF_UP);
}