我只是想知道是否有办法检查加密图像是否存在于https上。
我使用下面的代码检查图像是否存在。如果有,则会返回200
,如果不是,则返回404
。但这仅适用于不包含https
的图片网址。
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);
}
如果我尝试验证此网址(https://encrypted-tbn2.gstatic.com/images?q=tbn:ANd9GcTup5KSMveqkgrDKZR6p-0ANhPkJ7srbJOlKR78DUqqh85I_3MUrw
),则会得到0而不是200或404的结果。
我曾考虑使用getimagesize()
函数来完成此任务。但即使这个功能也适用于不通过HTTPS发送的图像。
答案 0 :(得分:2)
由于您使用的是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);
答案 1 :(得分:1)
您只需停用
验证对等方 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
所以你不必担心。
小心:@ user555答案更适合安全目的
答案 2 :(得分:0)
来自Curl的响应代码0通常表示连接到服务器的错误或沿着这些行的某些内容(请参阅PHP cURL HTTP CODE return 0和无数其他问题)。
然而,我确实使用PHP 5.5.x运行此代码,并按预期返回200。 getimagesize()不工作也让我觉得你的系统上卷曲或php很可能是个问题,你有什么版本的?