检查URL是否存在,以及它是否';这是一张图片


Check if URL exist, and if it's an image

我试图用一个文本字符串检查两件事。首先,我想检查一下它是否是一个真实的URL。然后,如果是的话,我想检查这个URL是否是一个图像。我得到了这个答案,它说要做以下事情:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$imageURL);
curl_setopt($ch, CURLOPT_NOBODY, 1);
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
if(curl_exec($ch)!==FALSE) {
    print_r("went Throught");
}
else {
    print_r("Failed");
}
curl_close($ch);

不管$imageURL是什么,我总是得到Failed。如何实现以下目标:

if ($imageURL isRealUrl) {
    // Do some code
    if ($imageURL isInArrayOfImages(.png, .jpg, .GIF) {
        // Do something
    }
}

你永远不可能100%确定,但我至少会检查一下:

  1. Content Headers而不是扩展(即使使用".php"或其他任何扩展动态提供图像也有效)
  2. 检查内容长度标头以确保其大于零,并且服务器没有向我发送软404
  3. 最后检查最终图像是否为重定向。(以404页或默认图像文件为例)

    $content_type = curl_getinfo($ch, CURLINFO_CONTENT_TYPE);
    $content_length = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
    $content_redirect = curl_getinfo($ch, CURLINFO_REDIRECT_COUNT );
    $imageTypes = array('image/png','image/jpeg','image/gif');
    if(in_array($content_type,$imageTypes) && $content_redirect == 0 && $content_length >0){
    // is a vald image
    }
    

以停止curl将整个图像文件集CCD_ 3下载为true。

curl_setopt($ch, CURLOPT_NOBODY, true);

您可以依赖URL头,而不是使用cURL。尽管这并不是100%的傻瓜,因为有些服务器发送了不正确的头,但它仍然是可靠的,因为它可以处理通过脚本传递的大多数图像。唯一的其他方法是使用getimagesize(),但这将把整个映像下载到服务器上。

不管怎样,这里有一个建议的脚本:

<?php
// URL
$url = "http://www.someurl.com/image.jpg";
// Check if URL exists
$get_headers = @get_headers($url);
if($get_headers[0] == 'HTTP/1.1 404 Not Found') {
    $url_exists = false;
} else {
    $url_exists = true;
}
// Check if URL is image using the same headers
if($url_exists){
    if(isset($get_headers['Content-Type'])){
        $type = strtolower($get_headers['Content-Type']);
        $valid_image_type = array();
        $valid_image_type['image/png']      = '';
        $valid_image_type['image/jpg']      = '';
        $valid_image_type['image/jpeg']     = '';
        $valid_image_type['image/jpe']      = '';
        $valid_image_type['image/gif']      = '';
        $valid_image_type['image/tif']      = '';
        $valid_image_type['image/tiff']     = '';
        $valid_image_type['image/svg']      = '';
        $valid_image_type['image/ico']      = '';
        $valid_image_type['image/icon']     = '';
        $valid_image_type['image/x-icon']   = '';
        $valid_image_type['image/bmp']      = '';
        if(isset($valid_image_type[$type])){
            // URL is image
        } else {
            // URL isn't an image
        }
    }
} else {
    // URL doesn't exist
}
?>