header("Content-Type: text/html; charset=utf-8");
$content = "https://www.google.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;
}
Внедрим в ранее написанный код. И получим уже следующую конструкцию:
header("Content-Type: text/html; charset=utf-8");
$content = "https://www.google.com/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);
В таком случае, в зависимости от размера файла, мы получим читабельное число и размерность, что значительно удобнее, нежели размер в байтах.