PHP判断文件是否为图片
判断上传的文件是不是图片,光看扩展名基本等于没判断,改成 .jpg 的木马照样能传上来。
最常用的是 getimagesize,能读到宽高和 MIME,就说明文件头是图片格式。
// getimagesize 返回数组说明是图片,返回 false 就不是
$info = @getimagesize('a.jpg');
if ($info !== false) {
echo $info['mime']; // image/jpeg
echo $info[0] . 'x' . $info[1]; // 宽 x 高
} else {
echo '不是图片';
}
exif_imagetype 只读文件头几个字节,速度快,适合先粗筛一遍。
// 返回常量,常见值是 1=jpg 2=jpeg 3=png 4=gif
$type = @exif_imagetype('a.jpg');
if ($type === IMAGETYPE_JPEG) {
echo '是jpg';
}
要求再严一点就用 finfo 读真实 MIME。别信 $_FILES['type'],那是浏览器给的,随手能改。判断通过之后再用 is_uploaded_file 和 move_uploaded_file 存盘,文件名自己重新生成,别用用户传上来的名字。
说点什么 0