2015-11-20 127 views
0

我试图用一串文本检查2件事。首先,我想检查它是否是一个真正的URL。那么,如果是这样,我想检查该URL是否是图像。我来到this answer,并说要做到以下几点:检查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 
    } 
} 
+0

那么,你正在使用$ imageURL和$ url。这是什么? – rjdown

+1

为什么不用'getimagesize()'来回答? – harrrrrrry

+0

这是$ imageURL。 – Horay

回答

2

你永远不可能100%肯定,但我至少检查:

  1. 内容头部,而不是扩展(工程,即使在图像是通过扩展“.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 
    } 
    

从下载整个图像文件中设置CURLOPT_NOBODY为true停止卷曲。

curl_setopt($ch, CURLOPT_NOBODY, true); 
+0

嘿!感谢你的回答!我总是得到“工作,但不是一个图像”http://phpfiddle.org/main/code/c0uz-ijv9 – Horay

+0

移动'curl_close($ ch);'到最后,一旦你调用所有与卷曲有关的信息和最后一个请求被重置。 – Shujaat

+0

感谢您的回答!如果我想开始,如果它在我发给你的phpfiddle中的所有if语句中都是错误的?我想我会只是添加'!'在每个发言之前。当我这样做时,我没有得到正确的结果。所有开始的if语句如何都是错误的,其他的都是真的?意思是,if语句会输出“失败”,而其他语句会输出“Worked”。 – Horay

0

而不是使用cURL,您可以改为使用URL标头。虽然这不是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 
} 

?> 
相关问题