В этой заметке приведены две функции:

  • для превращения размера в байтах в кило-, мега-, гига- и терабайты.
  • для конвертации «человеческого» представления размеров файлов (н-р 10 MB, 200.20 GB) в байты

Функция formatBytes() принимает в качестве входных параметров число байт и точность округления (число знаков после запятой, по умолчанию 2), определяет размерность в «человеческом» представлении и возвращает строку типа «200.20 GB»

function formatBytes($bytes, $precision = 2)
{
	$units = array('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;
	$bytes_array = array(
		'B' => 1,
		'KB' => 1024,
		'MB' => 1024 * 1024,
		'GB' => 1024 * 1024 * 1024,
		'TB' => 1024 * 1024 * 1024 * 1024,
		'PB' => 1024 * 1024 * 1024 * 1024 * 1024,
	);
	$bytes = floatval($str);
	if (preg_match('#([KMGTP]?B)$#si', $str, $matches) && !empty($bytes_array[$matches[1]])) {
		$bytes *= $bytes_array[$matches[1]];
	}
	$bytes = intval(round($bytes, 2));
	return $bytes;
}

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *