Один и тот же URL-адрес изображения возвращает либо 24-битное, либо 32-битное изображение на Cloudfare Server? (проверка cURL "длина содержимого") - PullRequest
2 голосов
/ 04 февраля 2020

Это меня очень смущает, и я нигде не могу найти никакой информации, которая могла бы объяснить это.

У меня есть база данных, содержащая около 1000 URL-адресов изображений, и я выполняю обратный вызов заголовка cURL

curl_setopt($this->curl, CURLOPT_HEADERFUNCTION, array($this, 'headerCallback'));

Который в нем ищет длину содержимого URL изображения ...

if ($name === 'content-length' && (int) $value === $this->filesizecheck) {
    curl_setopt($this->curl, CURLOPT_NOBODY, true);
}

filesizecheck просто проверяет размер файла уже загруженного изображения на моем сервере.

CURLOPT_NOBODY означает, что если размер файла на моем сервере совпадает с длиной содержимого, полученной из заголовка, он дает команду системе не загружать тело изображения и останавливаться на заголовке.

Моя первоначальная идея при реализации этого состояла в том, чтобы проверить, изменилось ли изображение в URL-адресе изображения, и, если это так, загрузить и заменить изображение. Если нет - выполните проверку заголовка и пропустите его.

Меня поражает то, что иногда один и тот же URL-адрес изображения возвращает либо 24-разрядное, либо 32-разрядное изображение точно такого же изображения. Это было то, чего я не ожидал, и, очевидно, сбрасывает мой filesizecheck!

Вот заголовки для URL-адреса изображения, если оно намекает на что-либо:

Array
(
    [0] => Accept: text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,image/apng,*/*;q=0.8
    [1] => Accept-Encoding: gzip, deflate
    [2] => Accept-Language: en-US,en;q=0.9
    [3] => Connection: keep-alive
    [4] => Host: /////
    [5] => Upgrade-Insecure-Requests: 1
)

Теперь это только на одном сервере / хосте, с которым я сталкивался с этим.

Кто-нибудь когда-либо сталкивался с точно таким же URL-адресом изображения, возвращая либо 24-битное значение (например, content-length значение: 397570 одного изображения), либо 32-битное изображение (content-length значение: 501502) того же изображения, почему это и есть ли что-то, что я могу сделать, чтобы решить эту странную проблему?

Конечно, это отбрасывает всю систему проверка заголовка и загрузка изображения, если оно «изменилось» - иногда оно хочет загрузить 24-битное изображение, иногда оно хочет загрузить 32-битное изображение - кажется совершенно случайным, когда оно возвращает 24-битное или 32-битное изображение.

Визуально - в изображении нет различий.

Должен ли я как-то получить значения как для 24-битного, так и для 32-битного изображения, чтобы это работало? Кто-нибудь знает, почему статический URL-адрес изображения c будет возвращать (на первый взгляд случайно) либо 24-битное, либо 32-битное изображение того же изображения?

Каким будет предлагаемый путь вперед? Любые советы или информация будет принята с благодарностью!

...