Как получить размер файла удаленного файла из googlecode с помощью cURL? - PullRequest
0 голосов
/ 14 декабря 2009

Я пытаюсь получить размер файла удаленного файла "compiler-latest.zip" (googlecode.com), используя cURL, фактически не загружая его, вот мой код PHP:

$url = 'http://closure-compiler.googlecode.com/files/compiler-latest.zip';
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_HEADER, 1);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1); // optional
curl_setopt($ch, CURLOPT_MAXREDIRS, 10); // optional
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // optional
$result = curl_exec($ch);
$filesize = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
curl_close($ch);
print 'Filesize: ' . $filesize . '<br><br>';
print_r($result);

Но я получаю статус «HTTP / 1.1 404 Not Found» с размером файла (1379 байт) этого документа с ошибкой 404. Итак, если я установил (CURLOPT_NOBODY, 0), он загрузит файл и вернет его правильный размер файла (в настоящее время 3820320 байт). У меня вопрос, как получить правильный размер файла "compiler-latest.zip", не загружая его?

ВАЖНО: этот код работает, как и ожидалось, с любым другим URL за пределами googlecode.com.

Ответы [ 2 ]

2 голосов
/ 15 декабря 2009

Использование get_headers Функция:

<?php

$headers = get_headers('http://closure-compiler.googlecode.com/files/compiler-latest.zip');

$content_length = -1;

foreach ($headers as $h)
{
    preg_match('/Content-Length: (\d+)/', $h, $m);
    if (isset($m[1]))
    {
        $content_length = (int)$m[1];
        break;
    }
}

echo $content_length;
1 голос
/ 18 марта 2010

А как получить размер файла, если длина содержимого отсутствует?

...