2012-04-11 5 views
3

Мне нужно получить размер удаленного файла без загрузки. Я использую этот код, но заголовки с некоторых сайтов не содержат Content-Length:. Как я могу получить размер файла в этих случаях?получить удаленный размер файла (без использования поля Content-Length)

$ch = curl_init("http://wordpress.org/latest.zip"); 
curl_setopt($ch, CURLOPT_NOBODY, true); 
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
curl_setopt($ch, CURLOPT_HEADER, true); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
$data = curl_exec($ch); 
curl_close($ch); 

$contentLength = 'unknown'; 
if (preg_match('/Content-Length: (\d+)/', $data, $matches)) { 
    $contentLength = (int)$matches[1]; 
} 
echo $contentLength; 

Это результат данных echo $;

HTTP/1.1 200 OK 
Server: nginx 
Date: Tue, 10 Apr 2012 11:32:20 GMT 
Content-Type: application/zip 
Connection: close 
Pragma: no-cache 
Cache-control: private 
Content-Description: File Transfer 
Content-Disposition: attachment; filename=wordpress-3.3.1.zip 
Content-MD5: d6332c76ec09fdc13db412ca0b024df9 
X-nc: EXPIRED luv 139 
+0

Возможно, заголовок возвращается, но имя находится в малом размере «длины доски»? Или что между двоеточием и фактическим значением есть пробелы. – Cyclonecode

+0

'echo $ data', чтобы увидеть содержимое и заголовки – safarov

+0

@safarov, я добавил результат эхо-данных на вопрос. – artaskerov

ответ

0

Если заголовок Content-Length отсутствует, значит, размер файла неизвестен. В вашем случае у вас есть заголовок Content-Disposition, что означает, что загружаемый файл является вложением в ответ сервера (так же, как вложение электронной почты). Итак, если у вас нет заголовка Content-Length, вы не можете получить размер.

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