INVERSER
INVERSER
Powerful web-based technologies
Powerful web-based technologies
Email:
Mobile:
YouTube

Определить размер файла, используя код php очень просто и сейчас Вы узнаете как...

В некоторых ситуациях необходимо узнать размер файла PHP, который расположен либо на том же сервере, где лежит скрипт, либо на удаленном сервере. Такая задача может быть реализована несколькими способами. Однако, наиболее короткий, удобный и быстрый является проверка файла, посредством использования функции stream_get_meta_data, которая возвращает определенные данные, используя fsockopen(), fopen() или pfsockopen(). Версия PHP с которой доступна данная функция — PHP 4 >= 4.3.0, PHP 5.

Итак, ситуация: файл находится на сервере http://test.org/file.zip Для того, чтобы определить его размер сразу, без использования базы данных, мы используем следующий код, который также приводит размер файла к удобному формату: ГБ, МБ, КБ, Б.

<?php
//создадим функцию, которая будет определять размер файла
function fsize($path)
{
$fp = fopen($path,"r");
$inf = stream_get_meta_data($fp);
fclose($fp);
foreach($inf["wrapper_data"] as $v) {
if (stristr($v, "content-length")) {
$v = explode(":", $v);
return trim($v[1]);
}
}
}
//эта функция будет указывать ссылку на файл
//сюда также можно подставить значение переменной, например:
//$link_to_file = [значение из БД];
//$filesize = link_to_file;
$filesize = "https://f.usemind.org/files/scripts/google!.txt";
//функция, которой присваивается размер в байтах
$inbytes = fsize($filesize);

//приводим размер к удобному формату, например 115,4 МБ
//если файл имеет нулевое значение, то есть не найден, то выводим информацию об этом
if ($inbytes == 0)
{echo $inbytes = "Файл не найден!";}
else
{
// Если размер переданного в функцию файла больше 1кб
if($inbytes >= 1024)
{
$inbytes = ($inbytes/1024);
// если размер файла больше одного килобайта
// пересчитываем в мегабайтах
if($inbytes > 1024)
{
$inbytes = ($inbytes/1024);
// если размер файла больше одного мегабайта
// пересчитываем в гигабайтах
if($inbytes > 1024)
{
$inbytes = ($inbytes/1024);
$inbytes = round($inbytes, 1);
echo $inbytes." ГБ";

}
else
{
$inbytes = round($inbytes, 1);
echo $inbytes." MБ";
}

}
else
{
$inbytes = round($inbytes, 1);
echo $inbytes." КБ";
}

}
else
{
$inbytes = round($inbytes, 1);
echo $inbytes." Б";
}
}
?>

На этом все. Возможно, Вы сможете усовершенствовать этот код или спросить меня о чем-либо в комментариях.

PHP размер файла

Задать вопрос

usemind 2015-11-06 08:59:07
Евгений, ну для моего случая хватает. Благодарю, как-нибудь дойдут руки - попробую Ваш вариант ;)
Евгений 2015-11-06 08:58:45
function _getSize($url)
{
$size=0;
$fp = get_headers($url, 1);
foreach ($fp['Content-Length'] as $v){
$size = $v;
}
return $v;
}
вот вам ещё вариант, вернёт последнее значение Content-Lenght заголовка, т.к. возможен редирект
Евгений 2015-11-06 08:58:33
некорректно отработает если будет 302 редирект в ответе сервера
Хостинг для Вашего сайта
от 7$/365 дней
подробнее