2015-11-20 174 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 
} 

?> 
相關問題