Эффективные способы получения длины контента с использованием CURL в PHP

При работе с CURL в PHP часто необходимо получить конкретную информацию из заголовков ответов сервера. Одним из таких фрагментов информации является Content-Length, который представляет размер содержимого ответа в байтах. В этой статье мы рассмотрим различные методы извлечения Content-Length с использованием CURL в PHP.

Метод 1: использование параметра CURLOPT_HEADERFUNCTION

<?php
function headerCallback($curl, $header_line) {
    if (strpos($header_line, 'Content-Length') !== false) {
        $contentLength = intval(trim(explode(':', $header_line)[1]));
        // Use contentLength as needed
    }
    return strlen($header_line);
}
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://example.com");
curl_setopt($curl, CURLOPT_HEADERFUNCTION, 'headerCallback');
curl_exec($curl);
curl_close($curl);
?>

Метод 2: анализ необработанных заголовков ответов

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://example.com");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($curl);
curl_close($curl);
$headers = explode("\r\n", $response);
foreach ($headers as $header) {
    if (strpos($header, 'Content-Length') !== false) {
        $contentLength = intval(trim(explode(':', $header)[1]));
        // Use contentLength as needed
        break;
    }
}
?>

Метод 3: использование функции get_headers()

<?php
$headers = get_headers("http://example.com", true);
$contentLength = intval($headers['Content-Length']);
// Use contentLength as needed
?>

Метод 4. Получение заголовков с помощью запроса HEAD

<?php
$curl = curl_init();
curl_setopt($curl, CURLOPT_URL, "http://example.com");
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
curl_setopt($curl, CURLOPT_NOBODY, true);
curl_setopt($curl, CURLOPT_HEADER, true);
$response = curl_exec($curl);
curl_close($curl);
$headers = explode("\r\n", $response);
foreach ($headers as $header) {
    if (strpos($header, 'Content-Length') !== false) {
        $contentLength = intval(trim(explode(':', $header)[1]));
        // Use contentLength as needed
        break;
    }
}
?>

Получение Content-Length с помощью CURL в PHP является распространенным требованием при работе с HTTP-запросами. В этой статье мы рассмотрели несколько методов достижения этой задачи. Вы можете выбрать метод, который лучше всего подходит для вашего конкретного случая использования. Независимо от того, предпочитаете ли вы использовать функции обратного вызова, анализировать необработанные заголовки, использовать встроенные функции, такие как get_headers(), или получать заголовки с помощью запроса HEAD, эти методы помогут вам эффективно извлекать Content-Length из ответов сервера.

Применяя эти методы, вы можете улучшить свои PHP-приложения за счет простого и точного получения Content-Length.

Не забывайте обрабатывать случаи ошибок и выполнять соответствующую проверку ошибок, чтобы обеспечить надежность вашего кода.