Артём Мáлков

Как узнать размер файла по его URL на PHP?

30 окт1 коммАртём Мáлков

На вашем сайте организовано хранение различного рода файлов. Одним из правильных решений будет отображение размера того или иного файла, ведь в зависимости от скорости интернета и его трафика пользователь сделает выводы – может ли он скачать этот файл сейчас или нет.

Реализация следующая:

<?php

	header("Content-Type: text/html; charset=utf-8");
	
	$content = "https://www.pandoge.com/logo.png"; // Ссылка на файл
	$file_open = fopen($content, "r");
	$file_size = 0;
	
	while(($str = fread($file_open, 1024)) != null) {
	
		$file_size += strlen($str);
		
	}

	echo "Размер файла: ".$file_size;
	
?>

Все бы хорошо, но в таком случае мы получаем размер в байтах, а что, если мы имеем достаточно большой размер файла и число вида «1 000 000» попросту испугает пользователя?

Для этого мы напишем небольшую функцию:

function size_convert($bytes) {

	$bytes = floatval($bytes);
	
	$arBytes = array(
		0 => array(
			"UNIT" => "Tb",
			"VALUE" => pow(1024, 4)
		),
		1 => array(
			"UNIT" => "Gb",
			"VALUE" => pow(1024, 3)
		),
		2 => array(
			"UNIT" => "Mb",
			"VALUE" => pow(1024, 2)
		),
		3 => array(
			"UNIT" => "Kb",
			"VALUE" => 1024
		),
		4 => array(
			"UNIT" => "b",
			"VALUE" => 1
		),
	);

	foreach($arBytes as $arItem) {
	
		if($bytes >= $arItem["VALUE"]) {
		
			$result = $bytes / $arItem["VALUE"];
			$result = str_replace(".", "," , strval(round($result, 2)))." ".$arItem["UNIT"];
			
			break;
			
		}
		
	}
	
	return $result;
	
}

Которую внедрим в ранее написанный код. И получим уже следующую конструкцию:

<?php

	header("Content-Type: text/html; charset=utf-8");
	
	$content = "https://www.pandoge.com/templates/art_malcov/images/blog_logo.png"; // Ссылка на файл
	$file_open = fopen($content, "r");
	$file_size = 0;
	
	while(($str = fread($file_open, 1024)) != null) {
	
		$file_size += strlen($str);

	}

	function size_convert($bytes) {

		$bytes = floatval($bytes);
	
		$arBytes = array(
			0 => array(
				"UNIT" => "Tb",
				"VALUE" => pow(1024, 4)
			),
			1 => array(
				"UNIT" => "Gb",
				"VALUE" => pow(1024, 3)
			),
			2 => array(
				"UNIT" => "Mb",
				"VALUE" => pow(1024, 2)
			),
			3 => array(
				"UNIT" => "Kb",
				"VALUE" => 1024
			),
			4 => array(
				"UNIT" => "b",
				"VALUE" => 1
			),
		);

		foreach($arBytes as $arItem) {
	
			if($bytes >= $arItem["VALUE"]) {
		
				$result = $bytes / $arItem["VALUE"];
				$result = str_replace(".", "," , strval(round($result, 2)))." ".$arItem["UNIT"];
			
				break;
			
			}
		
		}
	
		return $result;
	
	}

	echo "Размер файла: ".size_convert($file_size);
	
?>

В таком случае, в зависимости от размера файла, мы получим читабельное число и размерность, что значительно удобнее, нежели размер в байтах.

Рекомендуем к просмотру
Как проверить существование файла на PHP?
Статьи и советы
Делаем первую букву в строке заглавной на PHP/jQuery/CSS
Модули и скрипты
12 вариантов обрезки строки на PHP
Модули и скрипты
1
комментарий
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 2
    766
      •  Гости
    21 янв в 07:04

    можно ли переделать этот PHP чтобы он показывал не размер а продолжительность видео музыки и тд

    За ранее спасибо за ответ

Подняться наверх
Регистрация на сайте
Pandoge - уникальный проект, который собрал на своих страницах большой опыт многих людей в сфере сайтостроения.Присоединяйся и ты к сообществу, получай неограниченные знания и начинай творить свою мечту!Нажимая кнопку «Регистрация» вы даете согласие на обработку своих персональных данных.
Имя и фамилия
E-mail
Логин
Пароль
Регистрация
Pandoge