Случайный выбор победителя «Вконтакте»   •   Online-инструменты
286 просм
1 комм
Поделиться:

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

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

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

<?php
	header("Content-Type: text/html; charset=utf-8");
	$content = "https://artem-malcov.ru/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://artem-malcov.ru/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
Оставить комментарий:
Нажимая кнопку «Отправить» вы даете согласие на обработку своих персональных данных.
Ваше Имя
Ваш E-mail
Текст комментария