Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Получение размера изображения

4.9K
01 декабря 2008 года
Valar
81 / / 18.03.2008
Доброго времени суток :)

Есть вопрос по работе с графическоими файлами. С помощью функции getimagesize() я определил высоту и ширину графического файла, а как определить его размер (в байтах) ?)

Файл удаленный - filesize() не воспользоваться.
563
01 декабря 2008 года
MrLinker
249 / / 17.09.2006
Если поразмыслить, то приходит много идей...
Первая основана на использовании функций, которые могут работать с удаленными файлами, т.е. file(), file_get_contents() и т.д.
Так, размер файла (не обязательно картинки) можно получить:
 
Код:
function urlfilesize($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;
}

Или через сокеты, например, как предлагается здесь:
Таким образом, мы может сотворить нечто такое:
 
Код:
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;
}

Если файла не существует, да и при любых других ошибках возвращает 0.
В первом приближении, не хватает преобразования регистра...
Также, разного рода идеи можно подчерпнуть тут:
http://ru2.php.net/filesize (комментарии снизу)
4.9K
01 декабря 2008 года
Valar
81 / / 18.03.2008
MrLinker, большое спасибо :)
33K
01 декабря 2008 года
DuMMeR
19 / / 30.01.2008
Спс. Заменил file_get_contents() на чтение заголовков. Стало намного шустрее.
325
02 декабря 2008 года
Franky
723 / / 10.08.2005
Честно спертая где-то ф-ция, немного доработана, сам пользую.
Код:
function fsize($size) {
       $a = array("B", "Kb", "Mb");

       $pos = 0;
       while ($size >= 1024) {
             $size /= 1024;
               $pos++;
       }

     return round($size,2)." ".$a[$pos];
}
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог