Информер курса валют ЦБ РФ   •   Магазин расширений
888 просм
1 комм
Поделиться:

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

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

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

<?php

	header("Content-Type: text/html; charset=utf-8");
	
	$content = "https://www.pandoge.com/logo.png"; // Ссылка на файл
	$file_open = fopen($content, "r");
	$file_size = "";
	
	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 = "";
	
	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
комментарий
Friend
21.01 в 07:04
можно ли переделать этот PHP чтобы он показывал не размер а продолжительность видео музыки и тд
За ранее спасибо за ответ
  • 1
Гостям запрещено учавствовать в обсуждениях сайта. Авторизуйтесь, чтобы иметь возможность оставить свое мнение о материале или задать вопрос.