Как узнать размер файла без скачивания?

В php как то можно узнать размер файла по ссылке без скачивания самого файла? Что то на подобии этого:

filesize('http://wallpapers-images.ru/1920x1080/mountains/wallpapers/mountains-wallpapers-1920x1080-0007.jpg');

Ответы (2 шт):

Автор решения: KoVadim

Можно. Нужно просто сделать head запрос, а не get. И если сервер будет добрым, то он в заголовках выставит размер содержимого в Content-Length - https://www.php.net/manual/ru/function.get-headers.php (там же есть и пример)

→ Ссылка
Автор решения: S.H.

В общем, если сервер эту инфу выдаёт - то она есть в HTTP-заголовках, а именно в заголовке Content-Length.

Чтобы получить набор HTTP-заголовков, не нужно делать запрос GET (он приведет к скачиванию файла, а Вы хотите этого избежать, не так ли?). Достаточно сделать запрос HEAD.

Я из руководства по PHP накопипастил кусок, который выводит все заголовки. Там надо смотреть на заголовок, который называется Content-Length, в данном случае он равен 763016

        <?

    $url = "http://wallpapers-images.ru/1920x1080/mountains/wallpapers/mountains-wallpapers-1920x1080-0007.jpg";

    // По умолчанию функция get_headers использует GET-запрос для получения заголовков. Если
    // вы хотите вместо него отправить HEAD-запрос, то это можно сделать, используя контекста потока:
    stream_context_set_default(
        array(
            'http' => array(
                'method' => 'HEAD'
            )
        )
    );

    $resp = get_headers( $url, 1);
    ?>

    <?=var_dump($resp);?>
→ Ссылка