$headers = get_headers("http://www.domain.com/image.jpg");
如何確保該文件是使用此文件的實際圖像?如何使用get_headers檢查遠程文件是否爲圖像
$headers = get_headers("http://www.domain.com/image.jpg");
如何確保該文件是使用此文件的實際圖像?如何使用get_headers檢查遠程文件是否爲圖像
完全沒有。標題可能或可能不會告訴你(通過Content-type
),服務器認爲這是 - 但沒有任何東西阻礙你把例如myfile.zip
在網絡服務器上,然後將其重命名爲myfile.jpg
。該網絡服務器將與Content-type: image/jpeg
一起服務,它明確不是。
查找的結果數組中的「內容類型」,並檢查它開始「圖像/」
像尤金·裏克說,你不能確定它是否是一個圖像,而無需下載它。 服務器始終可以更改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()
用於使所有數組鍵都小寫,所以這種情況沒有什麼不同。
我怎麼知道array_change_key_case存在? +1 – goat
正是憑藉這種方法很簡單,
$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";
}
我只是在尋找下載圖像之前做一個初步檢查。輔助檢查使用getimagesize完成,如果不是圖像,它將被刪除。你會說get_headers不適合這個目的嗎? – domino
那麼用GD代替? – Shubham
@domino對於你的用例,我當然可以看到這是有道理的:查找Content-type頭(注意,使用不區分大小寫的匹配)並檢查它是否以「image /」開頭 –