Сценарий: размер различных файлов хранится в базе данных в байтах. Как лучше всего отформатировать информацию о размере в килобайтах, мегабайтах и гигабайтах? Например, у меня есть MP3, который Ubuntu отображает как «5,2 МБ (5445632 байт)». Как бы я отобразил это на веб-странице как «5,2 МБ» И если файлы размером менее одного мегабайта отображаются в КБ, а файлы размером в один гигабайт и выше отображаются в ГБ?
184
Ответы:
(Взято с php.net , там много других примеров, но мне больше нравится этот :-)
источник
$bytes /= (1 << (10 * $pow))
или что-то подобное, мне бы это понравилось больше. :-PKiB
,MiB
,GiB
иTiB
так как вы деля1024
. Если бы вы поделились на1000
это было бы безi
.Uncomment one of the following alternatives
было чем-то, чего я не замечал в течение 5 минут ...Это реализация Криса Джестера-Янга, самая чистая из всех, что я когда-либо видел, в сочетании с php.net и точным аргументом.
источник
$suffixes = array('B', 'kB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');
я хочу жесткий диск Yottabyte! :-PformatBytes(259748192, 3)
возвращается,259748192 MB
что не правильнопсевдокод:
источник
Это реализация Kohana , вы можете использовать его:
источник
$force_unit
и,$si
кажется, делают то же самое. Вы также можете передать любую строку с «i»$force_unit
, потому что они проверяют позицию. Десятичное форматирование также излишне.Просто разделите его на 1024 для КБ, 1024 ^ 2 для МБ и 1024 ^ 3 для ГБ. Так просто, как, что.
источник
Просто моя альтернатива, короткая и чистая
или, более глупый и эффективный:
источник
используйте эту функцию, если вы хотите короткий код
bcdiv ()
источник
Я знаю, что может быть немного поздно ответить на этот вопрос, но больше данных не собирается кого-то убивать. Вот очень быстрая функция:
РЕДАКТИРОВАТЬ: я обновил свой пост, чтобы включить исправление, предложенное camomileCase:
источник
Простая функция
источник
Гибкое решение:
источник
Мне удалось с помощью следующей функции,
источник
Мой подход
источник
Я не знаю, почему вы должны сделать это так сложно, как другие.
Следующий код гораздо проще для понимания и примерно на 25% быстрее, чем другие решения, использующие функцию log (называемую функцией 20 миллионов раз с другими параметрами).
источник
Эта работа с последним PHP
источник
Я сделал это, преобразовав все входные данные в байты и, таким образом, преобразовав их в любой необходимый вывод. Кроме того, я использовал вспомогательную функцию для получения базы 1000 или 1024, но оставил ее гибкой, чтобы решить использовать 1024 для популярного типа (без «i», например, MB вместо MiB).
источник
попробуй это ;)
источник
источник
Просто вызовите функцию
источник
Хотя эта библиотека немного устарела, она предлагает проверенный и надежный API преобразования:
https://github.com/gabrielelana/byte-units
После установки:
И конвертировать в другом направлении:
Помимо базового преобразования, он предлагает методы сложения, вычитания, сравнения и т. Д.
Я никак не связан с этой библиотекой.
источник
источник
Вот упрощенная реализация функции Drupal format_size :
источник
Немного поздно, но чуть более быстрый вариант принятого ответа приведен ниже:
Это более эффективно благодаря выполнению одной операции log-2 вместо двух операций log-e.
Однако на самом деле быстрее сделать более очевидное решение ниже:
Это связано с тем, что индекс рассчитывается одновременно со значением количества байтов в соответствующем блоке. Это сократило время выполнения примерно на 35% (увеличение скорости на 55%).
источник
Другая сжатая реализация, которая может переводиться в основную 1024 (двоичную) или базовую 1000 (десятичную), а также работает с невероятно большими числами, следовательно, об использовании библиотеки bc:
источник
bcpow()
вызовет исключение TypeError, если$base
и$i
не являются строковыми значениями. Проверено на PHP версии 7.0.11.Я решил добавить сетку из двух отправителей кода (используя код Джона Химмельмана, который находится в этой теме и используя код Евгения Кузьменко ), который я использую.
Это использует код Евгения для форматирования
$value
в байты (я храню свои данные в МБ, поэтому он преобразует мои данные:10485760 MB
в10995116277760
) - затем он использует код Джона для преобразования его в правильное отображаемое значение (10995116277760
в10 TB
).Я нашел это действительно полезным - так что я благодарен двум представителям!
источник
Чрезвычайно простая функция, чтобы получить человеческий размер файла.
Первоисточник: http://php.net/manual/de/function.filesize.php#106569
Скопируйте / вставьте код:
источник
Я разработал свою собственную функцию, которая преобразует читаемый человеком размер памяти в разные размеры.
Эта функция принимает любое сокращение объема памяти, такое как «Мегабайт, МБ, МБ, МБ, М, КБ, К, КБ, В, Терабайт, Т ....», поэтому она безопасна при опечатке.
источник
Основываясь на ответе Лео , добавьте
Если вы хотите, чтобы максимальная единица измерения была Мега, измените на
$units = explode(' ', ' K M');
источник