2010-10-08 2 views
3

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

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

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

Я хотел бы для решения как один данный here (например, , что-то вроде:.

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

Но без необходимости загружать изображения это возможно

ответ

8

Предполагая, что вы беспокоитесь о размере файла (а не о размерах изображения), вы можете захватить 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"; 
+0

Я использовал [getimagesize] (http://php.net/manual/en/function.getimagesize.php), но он загружал весь файл до получения размера изображения. Спасибо за это. – machineaddict

0

Кто-то имеет функцию, что это в основном делает это как сокет-соединение: http://snippets.dzone.com/posts/show/1207

+0

Спасибо. В чем преимущество его подключения к сокету? –

+0

Это позволяет ему выполнять запрос HEAD на PHP4, который не имеет 'get_headers'. Я бы не использовал его сегодня. – bobince

+0

Это было бы, но его загрузка всего файла. – machineaddict

Смежные вопросы