Функция 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 Мебибайт"
Комментарии (0)
Автор контента
Оффлайн
Administrator
Последняя авторизация: 05.07.2026 18:32
- Страница размещена: 21.01.2025 22:38
- Последнее обновление: 21.01.2025 22:38