使用HTTPS检查图像是否存在

时间:2013-12-29 01:09:15

标签: php image url

我只是想知道是否有办法检查加密图像是否存在于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发送的图像。

3 个答案:

答案 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很可能是个问题,你有什么版本的?