size_format()WP 2.3.0

Конвертирует байты в понятный для человека формат: 500 B, 63 KB, 9 MB, 2 GB, 1 TB.

Форматирует размер файла в понятный формат.

Все размеры файлов в PHP хранятся в байтах и получаются в них с помощью filesize() или как-то еще. Но гораздо удобнее читать 1 KB чем 1024 B.

Функция получает количество байтов и изменяет их на количество:

  • килобайтов (KB)
  • мегабайтов (MB)
  • гигабайтов (GB)
  • терабайтов (TB)
  • петабайт (PB)
  • экзабайт (EB)
  • зеттабайт (ZB)
  • йоттабайт (YB)

Также, нужно помнить, что максимальное число на 32-разрядных системах ограничено и равно 2147483647, тогда как на 64-разрядной системе оно равно 9223372036854775807. Поэтому, когда нужно указать число большее чем система может обработать, указывайте число в виде строки.

wp_convert_hr_to_bytes() — похожая функция, которая наоборот, преобразует сокращенное байтовое значение в целочисленное байтовое значение. Например, 1Mb преобразован в 1048576.

Используйте эту кастомную функцию, чтобы преобразовать большой число в читаемый вид 1500 >> 1,5 тыс..

Работает на основе: number_format_i18n()
1 раз — 0.000025 сек (очень быстро) | 50000 раз — 0.11 сек (очень быстро) | PHP 7.0.8, WP 4.6

Хуков нет.

Возвращает

Строку|false. Строку или false, если не удалось сконвертировать.

Использование

size_format( $bytes, $decimals );
$bytes(число/строка) (обязательный)
Число байт, которые нужно сконвертировать. Имейте ввиду что в PHP есть максимальный допустимый размер для чисел и он мал в 32 разрядных системах.
$decimals(число)
Число цифр после запятой.
По умолчанию: 0

Примеры

0

#1 Демонстрация конвертации байтов

echo size_format( 99 );            //> 99 B
echo size_format( 9999 );          //> 10 KB
echo size_format( '9999' );        //> 10 KB
echo size_format( 9999, 2 );       //> 9,76 KB
echo size_format( 9999999 );       //> 10 MB
echo size_format( 9999999999 );    //> 9 GB
echo size_format( 9999999999999 ); //> 9 TB

Список изменений

С версии 2.3.0 Введена.
С версии 6.0.0 Support for PB, EB, ZB, and YB was added.

Код size_format() WP 6.5.2

function size_format( $bytes, $decimals = 0 ) {
	$quant = array(
		/* translators: Unit symbol for yottabyte. */
		_x( 'YB', 'unit symbol' ) => YB_IN_BYTES,
		/* translators: Unit symbol for zettabyte. */
		_x( 'ZB', 'unit symbol' ) => ZB_IN_BYTES,
		/* translators: Unit symbol for exabyte. */
		_x( 'EB', 'unit symbol' ) => EB_IN_BYTES,
		/* translators: Unit symbol for petabyte. */
		_x( 'PB', 'unit symbol' ) => PB_IN_BYTES,
		/* translators: Unit symbol for terabyte. */
		_x( 'TB', 'unit symbol' ) => TB_IN_BYTES,
		/* translators: Unit symbol for gigabyte. */
		_x( 'GB', 'unit symbol' ) => GB_IN_BYTES,
		/* translators: Unit symbol for megabyte. */
		_x( 'MB', 'unit symbol' ) => MB_IN_BYTES,
		/* translators: Unit symbol for kilobyte. */
		_x( 'KB', 'unit symbol' ) => KB_IN_BYTES,
		/* translators: Unit symbol for byte. */
		_x( 'B', 'unit symbol' )  => 1,
	);

	if ( 0 === $bytes ) {
		/* translators: Unit symbol for byte. */
		return number_format_i18n( 0, $decimals ) . ' ' . _x( 'B', 'unit symbol' );
	}

	foreach ( $quant as $unit => $mag ) {
		if ( (float) $bytes >= $mag ) {
			return number_format_i18n( $bytes / $mag, $decimals ) . ' ' . $unit;
		}
	}

	return false;
}