我想从语法中知道url是否是图片。 示例:http://www.blah.com/plo52.jpg或png或gif将返回true。 如果url以其他扩展名结尾,则该函数将返回false。
由于
答案 0 :(得分:14)
检查文件的mime类型。
答案 1 :(得分:8)
这不会告诉你它是否真的一张图片。这只会根据网址告诉你出现的内容:
$url = "http://somedomain.com/images/kittens.jpg";
if(preg_match("/\.(png|jpeg|jpg|gif|bmp)$/i", $url)) {
print "Appears to be an image";
} else {
print "Not an image.";
}
输出:
Appears to be an image
请注意,如果您希望看到通过.php脚本或.aspx脚本提供的图像,则此方法将失败。要进行真正可靠的测试,您需要检查mime类型。
答案 2 :(得分:5)
我建议您创建 HTTP HEAD 请求,这样您就不需要下载整个图像,然后根据返回的字符串解析并确保Content-Type为{{1} },image/jpeg
,image/pjpeg
,image/gif
或类似图片内容类型。
image/png
返回
string'HTTP / 1.1 200 OK
缓存控制:max-age = 604800
内容长度:3438
内容类型:image / png
Last-Modified:Sun,2010年1月10日 格林尼治标准时间09:14:52
Accept-Ranges:bytes
ETag:“32741b5ed591ca1:0”
服务器:Microsoft-IIS / 7.5
日期:2010年1月13日星期三20:37:47 GMT
'(长度= 256)
Content-Type标头可以被欺骗,当然..但99%的时间它不会,这就是为什么这种方法可靠。
答案 3 :(得分:3)
非图片网址仍然可以流式传输图片。例如,ashx或asp URL可以返回图像数据。最好的方法是检查MIME类型Response.ContentType。
答案 4 :(得分:2)
如果您确实需要100%确定,则需要下载资源并使用getimagesize()进行检查。
答案 5 :(得分:1)
我赞成了preg解决方案,但如果你真的,真的想知道然后下载文件并使用系统函数询问(例如通过exec使用linux file
。)
答案 6 :(得分:1)
您可以使用pathinfo获取扩展程序:
echo pathinfo('http://www.blah.com/plo52.jpg', PATHINFO_EXTENSION); // jpg
然后将其包装成函数
function hasExtension($uri, array $extensions = array('jpg','gif','png'))
{
return in_array(pathinfo($uri, PATHINFO_EXTENSION), $extensions);
}
hasExtension('http://www.blah.com/plo52.jpg'); // true
这也适用于常规文件路径,并且能够传递$ extension数组,但不限于正则表达式模式。请注意,该功能区分大小写。
答案 7 :(得分:1)
使用headers_list,然后检查内容类型http://php.net/manual/en/function.headers-list.php