Php 使用HTTPS检查图像是否存在

Php 使用HTTPS检查图像是否存在,php,image,url,Php,Image,Url,我只是想知道是否有一种方法来检查加密图像是否存在于https上 我使用下面的代码来检查图像是否存在。如果返回,则返回200,如果不返回,则返回404。但这只适用于不包含https的图像URL function exists_url($uri){ $ch = curl_init($uri); curl_setopt($ch, CURLOPT_NOBODY, true); curl_exec($ch);

我只是想知道是否有一种方法来检查加密图像是否存在于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-0anhpkj7srbjolkr78duqh85i_3MUrw
)它给我的结果是0,而不是200或404


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

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


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

因为您使用的是SSL/TLS,所以必须将curl指向有效的CA证书捆绑包。捆绑包必须采用
.pem
格式。您可以从中获得这样的捆绑包

接下来,您需要告诉cURL使用您的CA包。您可以使用
CURLOPT\u 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);

您可以简单地使用禁用对等验证

curl\u setopt($curl,CURLOPT\u SSL\u VERIFYPEER,FALSE)

所以你什么都不用担心


注意:@user555 answer出于安全目的更好

第一张图像没有以任何方式加密。URL的“加密”部分可能指的是HTTPS(也称为SSL/TLS)连接方法。其次,试着从curl得到一个合适的错误消息。然后你的解决方案是?Do
echo'curl error:'。旋度误差($ch)
curl\u exec($ch)
之后,发回错误消息。下面是我收到的错误“SSL证书问题,请验证CA证书是否正常。详细信息:错误:14090086:SSL例程:SSL3\u GET\u SERVER\u证书:证书验证失败0”这很适合验证url是否存在。但是如果你想确定它是否是一个图像呢?使用“”作为url将返回200以及有效的url。@user3135626正如您所尝试的,您可以使用
getimagesize()
函数,但是我更愿意使用,因为它不需要下载整个图像。您必须确保在PHP安装中启用了OpenSSL,以便可以将HTTPS用作流。不,我收到了以下错误:exif_imagetype():找不到包装器“HTTPS”-配置时是否忘记启用它PHP@user3135626执行
phpinfo()
并检查是否支持openssl。如果您没有找到它,您需要启用它,否则正如我在前面的评论中所述,HTTPS流将无法工作。