Для того чтобы определить размер файла можно воспользоваться стандартной функцией PHP. Но как отобразить его размер не в байтах а в нормальном формате?
PHP – узнать размер файла и отобразить в килобайтах, мегабайтах или гигабайтах
Задача: получить вывод файла в виде 12.4 Мб. Для решения будем использовать несколько встроенных функций. Изначально размер файла будет отображен в байтах. Например, такой код:
<? echo $filesize = filesize($filePath);
выведет размер именно в байтах (12314), что крайне неудобно. Одна из функций filesize() принимает своим аргументом путь к файлу относительно корня с самого сервера (может понадобиться $_SERVER[‘DOCUMENT_ROOT’]) – это важный момент, поскольку указав не верный путь, ничего не произойдет.
Для того чтобы написать функцию, нужно понимать простейшую математику:
в 1 килобайте (Кб) – 1024 байт
в 1 мегабайте (Мб) – 1024 килобайт
в 1 гигайбайте (Гб) – 1024 мегабайт
Исходя из этого, пишем небольшую функцию для читаемого отображения байт в нужный формат:
<? // аргумент функции это путь к файлу function getFilesize($file) { // ошибка if(!file_exists($file)) return "Файл не найден"; $filesize = filesize($file); // Если размер больше 1 Кб if($filesize > 1024) { $filesize = ($filesize/1024); // Если размер файла больше Килобайта // то лучше отобразить его в Мегабайтах. Пересчитываем в Мб if($filesize > 1024) { $filesize = ($filesize/1024); // А уж если файл больше 1 Мегабайта, то проверяем // Не больше ли он 1 Гигабайта if($filesize > 1024) { $filesize = ($filesize/1024); $filesize = round($filesize, 1); return $filesize." ГБ"; } else { $filesize = round($filesize, 1); return $filesize." MБ"; } } else { $filesize = round($filesize, 1); return $filesize." Кб"; } } else { $filesize = round($filesize, 1); return $filesize." байт"; } } ?>
Используем функцию:
echo $size = getFilesize($_SERVER['DOCUMENT_ROOT'].'/images/bg.jpg');
Данный код переконвертирует число в нужную величину, исходя из размера файла. Основная проблема, которая может возникнуть, это правильный путь к файлу, всё остальное должно отработать как часы 🙂 .
Также, в примере используется функция округления round(), при помощи которой читаемость становится еще более понятней;
Принято!Спасибо))))
Я вот такой способ запилил:
public static function sizeFormatter1($bytes): string
{
$bytes = abs($bytes);
$units = [‘байт’, ‘Кб’, ‘Мб’, ‘Гб’, ‘Тб’, ‘Петабайт’, ‘Эксабайт’, ‘Зеттабайт’, ‘Йоттабайт’];
for ($i = array_key_last($units); $i > 0 && $bytes <= 1024 ** $i; $i–) {
}
return sprintf('Размер файла %s %s.',
round($bytes / 1024 ** $i, 2),
$units[$i]);
}