Sử dụng PHP, được cung cấp URL, làm cách nào để xác định đó có phải là hình ảnh không?cách tốt nhất để xác định xem URL có phải là hình ảnh trong PHP
Không có ngữ cảnh cho URL - nó chỉ ở giữa tệp văn bản thuần túy hoặc có thể chỉ là một chuỗi.
Tôi không muốn chi phí cao (ví dụ: đọc nội dung của URL) vì điều này có thể được gọi cho nhiều URL trên một trang. Với hạn chế này, không cần thiết phải xác định tất cả các hình ảnh, nhưng tôi muốn có một dự đoán khá tốt.
Hiện tại tôi chỉ đang xem phần mở rộng của tệp, nhưng có vẻ như có cách nào tốt hơn.
Dưới đây là những gì tôi hiện có:
function isImage($url)
{
$pos = strrpos($url, ".");
if ($pos === false)
return false;
$ext = strtolower(trim(substr($url, $pos)));
$imgExts = array(".gif", ".jpg", ".jpeg", ".png", ".tiff", ".tif"); // this is far from complete but that's always going to be the case...
if (in_array($ext, $imgExts))
return true;
return false;
}
Edit: Trong trường hợp đó là hữu ích cho bất kỳ ai khác ở đây là chức năng chính thức sử dụng kỹ thuật này từ câu trả lời Emil H:
function isImage($url)
{
$params = array('http' => array(
'method' => 'HEAD'
));
$ctx = stream_context_create($params);
$fp = @fopen($url, 'rb', false, $ctx);
if (!$fp)
return false; // Problem with url
$meta = stream_get_meta_data($fp);
if ($meta === false)
{
fclose($fp);
return false; // Problem reading data from url
}
$wrapper_data = $meta["wrapper_data"];
if(is_array($wrapper_data)){
foreach(array_keys($wrapper_data) as $hh){
if (substr($wrapper_data[$hh], 0, 19) == "Content-Type: image") // strlen("Content-Type: image") == 19
{
fclose($fp);
return true;
}
}
}
fclose($fp);
return false;
}
Tôi sẽ không mô tả điều này như là bằng chứng chống đạn. Trình duyệt bỏ qua loại nội dung cho hình ảnh gặp phải trong phần tử thomasrutter
Có. Tôi đồng ý. Tôi sẽ thay đổi ngôn ngữ. :) Tôi nghĩ rằng đó là một trong những tốt nhất có thể làm mà không lấy các nội dung thực tế của url, mặc dù. –
(downvote loại bỏ) yeah Tôi nghĩ rằng đây là một lựa chọn phong nha bây giờ :) – thomasrutter