Функция cot_build_filesize в Cotonti

Функция cot_build_filesize генерирует удобочитаемое строковое представление размера файла, принимая в качестве параметров количество байтов и различные опции форматирования.

Код функции

/**
 * Generate human-readable filesize.
 *
 * @param float $bytes Filesize in bytes
 * @param int $decimals Number of decimals to show.
 * @param ?bool $round Round up to this number of decimals. Set false to disable or null to inherit from $decimals.
 * @param bool $binary Use binary instead of decimal calculation.
 *  Set TRUE for the IEC binary standard where 1 Kibibyte = 1024 bytes
 *  Set FALSE for the SI/IEEE decimal standard where 1 Kilobyte = 1000 bytes
 * @param string $smallestunit
 *  Key of the smallest unit to show. Any number smaller than this will return 'Less than 1 ...'.
 *  Effectively its a way to cut off $units at a certain key.
 * @return string
 * @see https://en.wikipedia.org/wiki/Byte#Multiple-byte_units
 */
function cot_build_filesize($bytes, $decimals = 0, $round = null, $binary = false, $smallestunit = null): string
{
    global $Ls;
    $scSign = ' '; // leading space for keys index cast as string
    $units = $binary
        ? [
            $scSign . 1099511627776 => $Ls['Tebibytes'],
            $scSign . 1073741824 => $Ls['Gibibytes'],
            $scSign . 1048576 => $Ls['Mebibytes'],
            $scSign . 1024 => $Ls['Kibibytes'],
            $scSign . 1 => $Ls['Bytes'],
        ]
        : [
            $scSign . 1000000000000 => $Ls['Terabytes'],
            $scSign . 1000000000 => $Ls['Gigabytes'],
            $scSign . 1000000 => $Ls['Megabytes'],
            $scSign . 1000 => $Ls['Kilobytes'],
            $scSign . 1 => $Ls['Bytes']
        ];


    if ($smallestunit) {
        $smallestunit = $scSign . $smallestunit;
    }
    $sizes = array_keys($units);

    // as byte can not be fractional
    if ($bytes < $sizes[sizeof($units)-2]) {
        $decimals = 0;
    }

    return cot_build_friendlynumber($bytes, $units, 1, $decimals, $round, $smallestunit);
}


Подробное описание:
Параметры функции:

$bytes: Размер файла в байтах.
$decimals: Количество десятичных знаков, которые нужно отобразить.
$round: Определяет, нужно ли округлять значение. Если null, используется значение из $decimals.
$binary: Определяет, использовать ли бинарные или десятичные множители. Если true, используется стандарт IEC (1024 байт в 1 Кибибайте). Если false, используется стандарт SI (1000 байт в 1 Килобайте).
$smallestunit: Ключ самого маленького юнита, который должен отображаться. Число меньше этого значения вернет строку "Меньше 1 ...".
Описание работы:

Сначала определяется набор единиц измерения (байты, килобайты и т.д.) на основе параметра $binary.
Если задан параметр $smallestunit, он преобразуется в строковой формат для сопоставления с ключами массива единиц.
Определяется, нужно ли использовать десятичные знаки на основе размера файла.
Функция вызывает cot_build_friendlynumber, которая выполняет окончательное преобразование размера файла в человеко-читаемую строку.

Пример использования:

Если передать в функцию

cot_build_filesize(1048576, 2, true, true)

то для 1 Мегабайта (в бинарном формате) функция вернет строку "1.00 Мебибайт".

Пример кода с использованием фреймворка Cotonti:

$fileSizeInBytes = 1048576; // 1 MB
echo cot_build_filesize($fileSizeInBytes, 2, true, true); // "1.00 Мебибайт"


 

 

3 минут чтения Administrator

Комментарии (0)

Комментарии отсутствуют
Добавление комментариев доступно только зарегистрированным пользователям

Автор контента

Administrator

Оффлайн

Administrator

Последняя авторизация: 05.07.2026 18:32

  • Страница размещена: 21.01.2025 22:38
  • Последнее обновление: 21.01.2025 22:38