首页 > 解决方案 > 相同的图像 URL 在 Cloudfare 服务器上返回 24 位或 32 位图像?(cURL“内容长度”检查)

问题描述

这让我很困惑,我似乎无法在任何地方找到任何可以解释这一点的信息。

我有一个包含大约 1,000 个图像 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-length501502:),为什么会这样,我能做些什么来解决这个奇怪的问题问题?

当然,如果图像“更改”,这会抛弃整个系统进行标头检查和下载图像——有时它想下载 24 位图像,有时它想下载 32 位图像——似乎完全随机至于何时返回 24 位或 32 位图像。

视觉上 - 图像没有区别。

我必须以某种方式从 24 位和 32 位图像中获取值才能使其正常工作吗?有谁知道为什么静态图像 URL 会返回(看似随机)同一图像的 24 位或 32 位?

建议的前进方向是什么?任何提示或信息将不胜感激!

标签: curlcloudflare32-bitcontent-length24-bit

解决方案


推荐阅读