【问题标题】:Check if an image exist using HTTPS使用 HTTPS 检查图像是否存在
【发布时间】:2014-01-16 06:01:50
【问题描述】:

我只是想知道是否有办法检查加密图像是否存在于 https。

我正在使用下面的代码来检查图像是否存在。如果是,它将返回200,如果不是,它将返回404。但这仅适用于不包含 https 的图像 URL。

function exists_url($uri){
            $ch = curl_init($uri);
            curl_setopt($ch, CURLOPT_NOBODY, true);
            curl_exec($ch);
            return $code = curl_getinfo($ch, CURLINFO_HTTP_CODE);
            curl_close($ch);

        }

如果我尝试验证此 url (https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTup5KSMveqkgrDKZR6p-0ANhPkJ7srbJOlKR78DUqqh85I_3MUrw),它会给我一个 0 而不是 200 或 404 的结果。

我曾想过使用getimagesize() 函数来完成这项任务。但即使这个功能也只适用于不通过 HTTPS 发送的图像。

【问题讨论】:

  • 第一个图像没有以任何方式加密。 URL 的“加密”部分可能指的是 HTTPS(也称为 SSL/TLS)的连接方法。其次,尝试curl_error() 从 curl 中获取正确的错误消息。
  • 那你的解决方案是?
  • curl_exec($ch) 之后执行echo 'Curl error: ' . curl_error($ch); 并回发错误消息。
  • 这是我收到的错误“SSL 证书问题,请验证 CA 证书是否正常。详细信息:错误:14090086:SSL 例程:SSL3_GET_SERVER_CERTIFICATE:certificate verify failed0”

标签: php image url


【解决方案1】:

由于您使用的是 SSL/TLS,因此您必须将 cURL 指向有效的 CA 证书包。捆绑包必须采用.pem 格式。您可以从http://curl.haxx.se/ca/ 获得这样的捆绑包。

接下来,您需要告诉 cURL 使用您的 CA 包。您可以使用CURLOPT_CAINFO 选项来执行此操作。

curl_setopt($ch, CURLOPT_CAINFO, '/path_to_file/cacert.pem');
curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 2);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, true);

【讨论】:

  • 这很好验证url是否存在。但是如果你想确定它是否是图像呢?使用 'google.com' 作为 url 将返回 200 以及有效的 url。
  • @user3135626 正如您所尝试的,您可以使用getimagesize() 功能,但我宁愿使用exif_imagetype(),因为它不需要下载整个图像。 您必须确保在您的 PHP 安装中启用了 OpenSSL,以便您可以将 HTTPS 用作流。
  • 不,我收到这个错误:exif_imagetype(): Unable to find the wrapper "https" - 你是不是在配置 PHP 时忘记启用它
  • @user3135626 执行phpinfo() 并检查openssl 支持。如果你没有找到它,你需要启用它,否则如我之前的评论所述,HTTPS 流将不起作用。
【解决方案2】:

您可以简单地停用对等点的验证

curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);

所以你不必担心什么。

注意:@user555 的回答更适合安全目的

【讨论】:

    【解决方案3】:

    来自 Curl 的响应代码 0 通常意味着连接到服务器时出现错误或类似情况(请参阅 PHP cURL HTTP CODE return 0 和无数其他问题)。

    然而,我确实使用 PHP 5.5.x 自己运行了这段代码,它按预期返回了 200。 getimagesize() 不工作也让我认为这很可能是您系统上的 curl 或 php 的问题,您有哪些版本?

    【讨论】:

      猜你喜欢
      • 2011-03-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-01-17
      • 2023-04-02
      • 2013-01-13
      • 1970-01-01
      相关资源
      最近更新 更多