में एक छवि है, एक यूआरएल दिया गया है, मैं यह कैसे निर्धारित कर सकता हूं कि यह एक छवि है या नहीं?यह निर्धारित करने का सबसे अच्छा तरीका है कि कोई URL PHP
यूआरएल के लिए कोई संदर्भ नहीं है - यह सिर्फ एक सादे पाठ फ़ाइल के बीच में है, या शायद अपने आप पर एक स्ट्रिंग है।
मुझे उच्च ओवरहेड नहीं चाहिए (उदा। यूआरएल की सामग्री पढ़ना) क्योंकि इसे किसी पृष्ठ पर कई यूआरएल के लिए बुलाया जा सकता है। इस प्रतिबंध को देखते हुए, यह आवश्यक नहीं है कि सभी छवियों की पहचान की जाए, लेकिन मुझे काफी अच्छा अनुमान चाहिए।
फिलहाल मैं फ़ाइल एक्सटेंशन को देख रहा हूं, लेकिन ऐसा लगता है कि इससे बेहतर तरीका होना चाहिए।
यहाँ मैं वर्तमान में क्या है:
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;
}
संपादित करें: मामले में यह किसी और यहाँ किसी को भी करने के लिए उपयोगी है अंतिम समारोह एमिल एच के जवाब से तकनीक का उपयोग:
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;
}
मैं इसे बुलेट प्रूफ के रूप में वर्णित नहीं करता। ब्राउज़र thomasrutter
हां। मैं सहमत हूँ। मैं भाषा बदल दूंगा। :) मुझे लगता है कि यूआरएल की वास्तविक सामग्री को पुनर्प्राप्त किए बिना यह सबसे अच्छा कर सकता है। –
(डाउनवोट हटा दिया गया) हाँ मुझे लगता है कि यह अब एक सभ्य विकल्प है :) – thomasrutter