PHP 图片上传,只是使用$_FILES["file"]["type"] 简单校验一下,随便一个文件如 rar,zip,php,java等文件改个文件名,改个后缀就能以图片形式上传到服务器,这样肯定是不好的。下面介绍使用exif_imagetype()方法校验图片真实格式的方法。
1、配置文件:(如果没有安装exif扩展需要安装扩展)
extension=php_mbstring.dll
extension=php_exif.dll ; Must be after mbstring as it depends on it
2、使用
/**
* 1、判断图片格式
*/
public function checkImg()
{
$file = "./down/test.jpg";
$check = @exif_imagetype($file);
$allowedExts = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG);
if (in_array($check, $allowedExts)) {
echo "是图片";
} else {
echo "不是图片";
}
}
3、exif_imagetype()方法介绍
手册:http://php.net/manual/zh/function.exif-imagetype.php
exif_imagetype() — 判断一个图像的类型
说明
int exif_imagetype ( string $filename
)
exif_imagetype() 读取一个图像的第一个字节并检查其签名。
本函数可用来避免调用其它 exif 函数用到了不支持的文件类型上或和 $_SERVER['HTTP_ACCEPT'] 结合使用来检查浏览器是否可以显示某个指定的图像。
参数
filename
被检查的图像文件名。
返回值
如果发现了恰当的签名则返回一个对应的常量,否则返回 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 |
(完)