Информация о размерности, заданная в байтах, может быть указана в других единицах. Стандарт Международной системы единиц СИ (SI) позволяет пересчитать размер, заданный в байтах, в другие единицы с учетом десятичной степени по следующей схеме:
B байт 10^0 = 2^0 KB килобайт (Кбайт) 10^3 байт/1000 MB мегабайт (Mбайт) 10^6 байт/1000000 GB гигабайт (Гбайт) 10^9 TB терабайт (Tбайт) 10^12 PB петабайт (Пбайт) 10^15 EB эксабайт (Эбайт) 10^18 ZB зеттабайт (Збайт) 10^21 YB йоттабайт (Ибайт) 10^24
Информация размерности, указанная в байтах, в соответствии со стандартами Международной электротехнической комиссии - МЭК (IEC) может быть указана в других единицах с учетом двоичной степени:
KiB кибибайт 2^10 байт/1024 MiB мебибайт 2^20 байт/1048576 GiB гибибайт 2^30 TiB тебибайт 2^40 PiB пебибайт 2^50 EiB эксбибайт 2^60 ZiB зебибайт 2^70 YiB йобибайт 2^80
Функция RecalcSizeInfo изменяет представление информации о размерности, то есть пересчитывает число байт в число килобайт или кибибайт, мегабайт или мебибайт и так далее или пересчитывает размер в обратную сторону.
Синтаксис
$Result=RecalcSizeInfo($Direct,$Unit,$Size,$Dim=0,$ModeError=rvsTriggerError);
Параметры
$Direct - направление пересчета заданного значения: cdiToBytes=1 - пересчитать килобайты или кибибайты и т.д. в байты; cdiFromBytes=2 - пересчитать байты в килобайты или кибибайты, ...; $Unit - единица измерения, от которой нужно произвести расчет в байтах или к которой нужно привести исходную величину, заданную в байтах. Всего определено 17 единиц B,KB,MB,GB,TB,PB,EB,ZB,YB,KiB,MiB,GiB,TiB,PiB,EiB,ZiB,YiB; $Size - исходная величина, которая требует пересчета; $Dim - точность (количество десятичных разрядов) с которой должен быть представлен результат (по умолчанию целочисленный результат); $ModeError - режим вывода сообщений об ошибке (по умолчанию через исключение с пользовательской ошибкой на сайте doortry.ru)
Возвращаемое значение
$Result - пересчитанное значение размерности (float); текст сообщения об ошибке (string) при $ModeError=rvsReturn или true/false в случае успешного/неуспешного выполнения функции при $ModeError<>rvsReturn
Зарегистрированные ошибки/исключения
RecalcDirectIncorrect - "Неверно указано направление пересчета"; UnitMeasureIncorrect - "Неверно указана единица измерения"
<?php namespace prown;
// PHP7/HTML5, EDGE/CHROME *** RecalcSizeInfo.php ***
// ****************************************************************************
// * TPhpPrown Изменить представление информации о размерности, *
// * то есть пересчитать число байт в число килобайт или кибибайт, *
// * мегабайт или мебибайт, ... или пересчитать в обратную сторону *
// * *
// * v1.1, 11.09.2021 Автор: Труфанов В.Е. *
// * Copyright © 2018 tve Дата создания: 08.09.2018 *
// ****************************************************************************
require_once 'iniConstMem.php';
require_once 'iniErrMessage.php';
require_once 'MakeUserError.php';
// Определяем массив единиц измерения
define ("bunits", array(
'B' => 2 ** 0,
'KB' => 10 ** 3, // 2 килобайт (Кбайт) 10^3 байт/1000
'MB' => 10 ** 6, // 3 мегабайт (Mбайт) 10^6 байт/1000000
'GB' => 10 ** 9, // 4 гигабайт (Гбайт) 10^9
'TB' => 10 ** 12, // 5 терабайт (Tбайт) 10^12
'PB' => 10 ** 15, // 6 петабайт (Пбайт) 10^15
'EB' => 10 ** 18, // 7 эксабайт (Эбайт) 10^18
'ZB' => 10 ** 21, // 8 зеттабайт (Збайт) 10^21
'YB' => 10 ** 24, // 9 йоттабайт (Ибайт) 10^24
'KiB' => 2 ** 10, // 10 кибибайт 2^10 байт/1024
'MiB' => 2 ** 20, // 11 мебибайт 2^20 байт/1048576
'GiB' => 2 ** 30, // 12 гибибайт 2^30
'TiB' => 2 ** 40, // 13 тебибайт 2^40
'PiB' => 2 ** 50, // 14 пебибайт 2^50
'EiB' => 2 ** 60, // 15 эксбибайт 2^60
'ZiB' => 2 ** 70, // 16 зебибайт 2^70
'YiB' => 2 ** 80)); // 17 йобибайт 2^80
// ****************************************************************************
// * Изменить представление информации о размерности, то есть пересчитать *
// * число байт в число килобайт или кибибайт, мегабайт или мебибайт, ... *
// * или пересчитать в обратную сторону *
// ****************************************************************************
function RecalcSizeInfo($Direct,$Unit,$Size,$Dim=0,$ModeError=rvsTriggerError)
{
// В зависимости от направления пересчитываем значение
if ($Direct==cdiToBytes) $Result=RecalcToBytes($Unit,$Size,$Dim,$ModeError);
else if ($Direct==cdiFromBytes) $Result=RecalcFromBytes($Unit,$Size,$Dim,$ModeError);
// Отмечаем ошибку "Неверно указано направление пересчета"
else $Result=MakeUserError(RecalcDirectIncorrect.' [$Direct='.$Direct.']','TPhpPrown',$ModeError);
return $Result;
}
// ****************************************************************************
// * Размер в байтах пересчитать в килобайты или кибибайты, *
// * мегабайты или мебибайты, ... *
// ****************************************************************************
function RecalcFromBytes($Unit,$Size,$Dim=0,$ModeError=rvsTriggerError)
{
$UnitValue=makeUnit($Unit,$ModeError);
// Пересчитываем значение
if (gettype($UnitValue)=='integer')
{
return round($Size/$UnitValue,$Dim);
}
// Отмечаем ошибку "Неверно указана единица измерения"
else return $UnitValue;
}
// ****************************************************************************
// * Размер, представленный в килобайтах или кибибайтах, *
// * мегабайтах или мебибайтах и т.д. в байты *
// ****************************************************************************
function RecalcToBytes($Unit,$Size,$Dim=0,$ModeError=rvsTriggerError)
{
$UnitValue=makeUnit($Unit,$ModeError);
if (gettype($UnitValue)=='integer')
{
return round($Size*$UnitValue,$Dim);
}
else return $UnitValue;
}
// ****************************************************************************
// * Выбрать значение из массива единиц измерения, *
// * соответствующее заданной единице измерения *
// ****************************************************************************
function makeUnit($Unit,$ModeError=rvsTriggerError)
{
$Result=false;
// Выбираем значение из массива единиц измерения
foreach(bunits as $k=>$v) if ($k==$Unit) $Result=$v;
// Отмечаем ошибку "Неверно указана единица измерения",
if (!$Result)
$Result=MakeUserError(UnitMeasureIncorrect.' [$Unit='.$Unit.']','TPhpPrown',$ModeError);
return $Result;
}
// ***************************************************** RecalcSizeInfo.php ***
Сообщения выполненного теста функции