PHP логотип
PHP логотип

У цій замітці наведено дві функції:

  • для перетворення розміру в байтах у кіло-, мега-, гіга- та терабайти.
  • для конвертації зрозумілого представлення розмірів файлів  (наприклад, 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);
}

Від Тетяна

IT-спеціалістка, викладачка, фанатка сучасних технологій. З 2009 року занурена у світ цифрового дизайну, веб-розробки та адміністрування систем. Ділюсь знаннями про веб-технології, IT-інструменти та корисні лайфхаки, викладаю студентам, навчаюсь сама.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *