Как определить размер файла на PHP

Для того чтобы определить размер файла можно воспользоваться стандартной функцией 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(), при помощи которой читаемость становится еще более понятней;

Если вам необходимо провести доработки на вашем проекте, обращайтесь ко мне за помощью ;)

автор: Dmitriy

З 2011 року займаюся веб-розробкою. Зараз я – PHP Full Stack Developer.
Обговорити ваш проект, а також дізнатися більше про мене ви можете на цьому сайті:
dev.forwww.com

Email: dmitriyribka@gmail.com

2 коментаря

  1. Я вот такой способ запилил:

    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]);
    }

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *