Мощные VPS/VDS-сервера на новейшем поколении процессоров Intel от 210 ₽ в месяц   •   Реклама
Артём Мáлков

Как узнать размер файла по его 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);
	
?>

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

1
комментарий
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 2
    766
      •  Гости
    21 янв в 07:04

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

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

Подняться наверх
«Pandoge» - помощник вебмастера