2012-05-13 76 views

回答

4

完全沒有。標題可能或可能不會告訴你(通過Content-type),服務器認爲這是 - 但沒有任何東西阻礙你把例如myfile.zip在網絡服務器上,然後將其重命名爲myfile.jpg。該網絡服務器將與Content-type: image/jpeg一起服務,它明確不是。

+0

我只是在尋找下載圖像之前做一個初步檢查。輔助檢查使用getimagesize完成,如果不是圖像,它將被刪除。你會說get_headers不適合這個目的嗎? – domino

+0

那麼用GD代替? – Shubham

+0

@domino對於你的用例,我當然可以看到這是有道理的:查找Content-type頭(注意,使用不區分大小寫的匹配)並檢查它是否以「image /」開頭 –

1

查找的結果數組中的「內容類型」,並檢查它開始「圖像/」

3

像尤金·裏克說,你不能確定它是否是一個圖像,而無需下載它。 服務器始終可以更改Content-Type標題使其看起來像圖像。

但是,你下載後,您可以使用此功能檢查:

if (getimagesize('path/to/image.jpg')) { 
    // image 
} 
else { 
    // not an image 
} 

如果你想使用反正內容類型,這應該工作:

$headers = array_change_key_case (get_headers ('http://example.com/exampleimage.jpg', 1)); 
if (substr ($headers ['content-type'], 0, 5) == 'image') { 
    // image 
} 
else { 
    // not an image 
} 

array_change_key_case()用於使所有數組鍵都小寫,所以這種情況沒有什麼不同。

+0

我怎麼知道array_change_key_case存在? +1 – goat

0

正是憑藉這種方法很簡單,

$headers = get_headers('http://covers.openlibrary.org/b/isbn/9780141323367-S.jpg'); 
$image_exist = implode(',',$headers); 
if (strpos($image_exist, 'image') !== false) 
{ 
    echo 'Yups'; 
} 
else 
{ 
    echo "Nopes"; 
} 
相關問題