function fsize($size) {
$a = array("B", "Kb", "Mb");
$pos = 0;
while ($size >= 1024) {
$size /= 1024;
$pos++;
}
return round($size,2)." ".$a[$pos];
}
Получение размера изображения
Есть вопрос по работе с графическоими файлами. С помощью функции getimagesize() я определил высоту и ширину графического файла, а как определить его размер (в байтах) ?)
Файл удаленный - filesize() не воспользоваться.
Первая основана на использовании функций, которые могут работать с удаленными файлами, т.е. file(), file_get_contents() и т.д.
Так, размер файла (не обязательно картинки) можно получить:
Код:
function urlfilesize($loc)
{
return strlen(@join('',@file($loc)));
}
function urlfilesize2($loc)
{
return strlen(@file_get_contents($loc));
}
{
return strlen(@join('',@file($loc)));
}
function urlfilesize2($loc)
{
return strlen(@file_get_contents($loc));
}
Не круть, конечно...
Другие идеи основаны на анализе HTTP-заголовков, в частности, поля Content-Length.
Тут также несколько подходов.
Можно воспользоваться функцией get_headers():
Код:
function urlfilesize3($loc)
{
if($headers = @get_headers($loc, 1)) return $headers['Content-Length'];
return 0;
}
{
if($headers = @get_headers($loc, 1)) return $headers['Content-Length'];
return 0;
}
Или через сокеты, например, как предлагается здесь:
Таким образом, мы может сотворить нечто такое:
Код:
function filesize_ex($loc)
{
if (substr($loc, 0, 4) == 'http')
{
if($headers = @get_headers($loc, 1)) return $headers['Content-Length'];
return 0;
}
return ($r = @filesize($loc)) ? $r : 0;
}
{
if (substr($loc, 0, 4) == 'http')
{
if($headers = @get_headers($loc, 1)) return $headers['Content-Length'];
return 0;
}
return ($r = @filesize($loc)) ? $r : 0;
}
Если файла не существует, да и при любых других ошибках возвращает 0.
В первом приближении, не хватает преобразования регистра...
Также, разного рода идеи можно подчерпнуть тут:
http://ru2.php.net/filesize (комментарии снизу)
MrLinker, большое спасибо :)
Спс. Заменил file_get_contents() на чтение заголовков. Стало намного шустрее.
Честно спертая где-то ф-ция, немного доработана, сам пользую.