Blog. Just Blog

Функция для отображения размера файла

Версия для печати Добавить в Избранное Отправить на E-Mail | Категория: Web-мастеру и не только | Автор: ManHunter
Размер файлов в PHP измеряется в байтах, но числа из большого количества цифр для восприятия очень неудобны. На мой взгляд гораздо нагляднее, если размер больших файлов будет отображаться в килобайтах, мегабайтах и так далее. Для этого я нарисовал вот такую вспомогательную функцию:
  1. function bytes2words($size) {
  2.     for($i=0$i<count($st=array('Кб','Мб','Гб')); $i++) {
  3.         if (($size/=1024)<1024) { $i++; break; }
  4.     }
  5.     return round($size,2).' '.$st[($i-1)];
  6. }
Результаты работы функции:
  1. echo bytes2words(1000).'<br>';              // 0.98 Кб
  2. echo bytes2words(10000).'<br>';             // 9.77 Кб
  3. echo bytes2words(100000).'<br>';            // 97.66 Кб
  4. echo bytes2words(1000000).'<br>';           // 976.56 Кб
  5. echo bytes2words(10000000).'<br>';          // 9.54 Мб
  6. echo bytes2words(100000000).'<br>';         // 95.37 Мб
  7. echo bytes2words(1000000000).'<br>';        // 953.67 Мб
  8. echo bytes2words(10000000000).'<br>';       // 9.31 Гб
  9. echo bytes2words(100000000000).'<br>';      // 93.13 Гб
  10. echo bytes2words(1000000000000).'<br>';     // 931.32 Гб
  11. echo bytes2words(10000000000000).'<br>';    // 9313.23 Гб
  12. echo bytes2words(100000000000000).'<br>';   // 93132.26 Гб
На перспективу можно учесть и терабайты (например, если надо считать не размер файлов, а магистральный трафик в датацентре), для этого в массив наименований надо просто добавить элемент 'Тб'. Тестовый вывод, соответственно, изменится следующим образом:
  1. echo bytes2words(100000000000).'<br>';      // 93.13 Гб
  2. echo bytes2words(1000000000000).'<br>';     // 931.32 Гб
  3. echo bytes2words(10000000000000).'<br>';    // 9.09 Тб
  4. echo bytes2words(100000000000000).'<br>';   // 90.95 Тб
Вспоминается шутка 90-х годов: "Сколько будет дважды два? - А мы покупаем или продаем?". Размер килобайта в функции указан как положено - 1024 байта, все результаты, соответственно, получаются из этого расчета. Если надо считать так, как это делают некоторые особо умные провайдеры, то замените в функции все значения 1024 на 1000.

Поделиться ссылкой ВКонтакте
Просмотров: 4597 | Комментариев: 4

Метки: PHP
Внимание! Статья опубликована больше года назад, информация могла устареть!

Комментарии

Отзывы посетителей сайта о статье
Vanyamba (20.01.2021 в 06:38):
Изящное решение. За что люблю PHP.
morgot (01.05.2020 в 19:00):
Спасибо, пригодилось, хорошая вещь.
Павел (04.11.2014 в 22:31):
Ещё один вариант:
function format_bytes($size, $precision = 2) {
    $base = log($size) / log(1024);
    $suf = array(' byte', ' Kb', ' Mb', ' Gb', ' Tb');
    return round(pow(1024, $base - floor($base)), $precision) . $suf[floor($base)];
}
Алексей (21.05.2012 в 14:39):
Супер-мини код :) Спасибо!

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

Заполните форму для добавления комментария
Имя*:
Текст комментария (не более 2000 символов)*:

*Все поля обязательны для заполнения.
Комментарии, содержащие рекламу, ненормативную лексику, оскорбления и т.п., а также флуд и сообщения не по теме, будут удаляться. Нарушителям может быть заблокирован доступ к сайту.
Наверх
Powered by PCL's Speckled Band Engine 0.2 RC3
© ManHunter / PCL, 2008-2024
При использовании материалов ссылка на сайт обязательна
Время генерации: 0.06 сек. / MySQL: 2 (0.0039 сек.) / Память: 4.5 Mb
Наверх