Как получить размер файла удаленно сохраненного изображения? (php)

Допустим, у нас есть файл изображения, хранящийся на удаленном сервере (например, возьмем это изображение), как мы можем определить (в PHP-коде) размер его файла?

Если бы файл был на сервере, мы бы использовали размер файла (см. здесь), но это не сработает с удаленным файлом (см. здесь ).

Другой альтернативой является проверка «Content-Length», но я считаю, что это не сработает для файла изображения (см. здесь)

Я хотел бы получить решение, подобное приведенному здесь (например, что-то вроде:

<?php
function get_remote_size($url) {  // magic
}
echo get_remote_size("http://humus101.com/wp-content/uploads/2009/11/Hummus-soup.jpg");
?>

Но без необходимости загружать образ. Это возможно?


person Tal Galili    schedule 08.10.2010    source источник


Ответы (3)


Предполагая, что вас беспокоит размер файла (а не размеры изображения), вы можете использовать Content-Length, и это обычно работает.

Если сервер на другом конце не предоставляет заголовок, у вас не будет другого выбора, кроме как ПОЛУЧИТЬ файл и локально проверить его размер.

<?PHP
$headers = get_headers('http://humus101.com/wp-content/uploads/2009/11/Hummus-soup.jpg');
$size = null;
foreach($headers as $h){
    /** look for Content-Length, and stick it in $size **/
}
if ($size === null){ //we didn't get a Content-Length header
    /** Grab file to local disk and use filesize() to set $size **/
}

echo "image is $size bytes";
person timdev    schedule 08.10.2010
comment
Я использовал getimagesize, но перед получением изображения загружался весь файл. размер. Спасибо за это. - person machineaddict; 16.04.2013

echo get_headers($url,1)['Длина содержимого'];

person mu3    schedule 24.04.2013

У кого-то еще есть функция для этого, которая в основном делает это как соединение через сокет: http://snippets.dzone.com/posts/show/1207

person FatherStorm    schedule 08.10.2010
comment
Спасибо. В чем преимущество подключения через сокет? - person Tal Galili; 09.10.2010
comment
Это позволяет ему выполнять запрос HEAD обратно на PHP4, у которого не было get_headers. Я бы не использовал его сегодня. - person bobince; 09.10.2010
comment
Это было бы, но это загрузка всего файла. - person machineaddict; 16.04.2013