在PHP中我们经常要使用到针对用户上传的图片的处理,比如用户头像、商品图片等,要控制使用者上传的文件是一个图片类型而不能是随便的一个文件格式,如果不进行控制不仅系统可能存在安全隐患,而且对于业务逻辑来说也没有处理完善。此文档总结如何在PHP中判断一个文件是否为图片类型的多种方法的使用
exif_imagetype函数用于判断一个图像的类型,它读取一个图像的第一个字节并检查其签名。 如果发现了正确的签名则返回一个对应的常量,否则返回 FALSE。返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但该函数的执行效率要高很多。实现代码如下:
function isImage($filepath) {
if ( !function_exists("exif_imagetype") ) {
throw new Exception("php_exif 扩展未开启");
}
$mimetype = exif_imagetype($filepath);
if ($mimetype == IMAGETYPE_GIF || $mimetype == IMAGETYPE_JPEG || $mimetype == IMAGETYPE_PNG || $mimetype == IMAGETYPE_BMP) {
return $mimetype;
}
return false;
}
exif_imagetype函数返回值的常量定义:| 常量值 | 常量名称 |
|---|---|
| 1 | IMAGETYPE_GIF |
| 2 | IMAGETYPE_JPEG |
| 3 | IMAGETYPE_PNG |
| 4 | IMAGETYPE_SWF |
| 5 | IMAGETYPE_PSD |
| 6 | IMAGETYPE_BMP |
| 7 | IMAGETYPE_TIFF_II(Intel 字节顺序) |
| 8 | IMAGETYPE_TIFF_MM(Motorola 字节顺序) |
| 9 | IMAGETYPE_JPC |
| 10 | IMAGETYPE_JP2 |
| 11 | IMAGETYPE_JPX |
| 12 | IMAGETYPE_JB2 |
| 13 | IMAGETYPE_SWC |
| 14 | IMAGETYPE_IFF |
| 15 | IMAGETYPE_WBMP |
| 16 | IMAGETYPE_XBM |