废话不多说,主要是针对于一些更改文件后缀为.jpg
等图片的,还有就是改成.php.jpg
等等,下面提供三种方法;
方法一(推荐):
使用 exif_imagetype
函数,该函数用于判断一个图像的类型。函数读取一个图像的第一个字节并检查其签名,如果发现了恰当的签名则返回一个对应的常量,否则返回 FALSE。返回值和 getimagesize() 返回的数组中的索引 2 (方法二的 $info['2']
)的值是一样的,但该函数要快得多。
$path = '图片地址';
$mimetype = exif_imagetype($path);
if ($mimetype == IMAGETYPE_GIF || $mimetype == IMAGETYPE_JPEG || $mimetype == IMAGETYPE_PNG || $mimetype == IMAGETYPE_BMP){
echo "是图片";
}else {
echo "不是图片";
}
该函数的返回值常量定义如下
IMAGETYPE_GIF
IMAGETYPE_JPEG
IMAGETYPE_PNG
IMAGETYPE_SWF
IMAGETYPE_PSD
IMAGETYPE_BMP
IMAGETYPE_TIFF_II(Intel 字节顺序)
IMAGETYPE_TIFF_MM(Motorola 字节顺序)
IMAGETYPE_JPC
IMAGETYPE_JP2
IMAGETYPE_JPX
IMAGETYPE_JB2
IMAGETYPE_SWC
IMAGETYPE_IFF
IMAGETYPE_WBMP
IMAGETYPE_XBM
方法二:
getimagesize
函数获取图片信息,然后进行判断。
$path = '图片地址';
function isImage($imgPath){
$types = '.gif|.jpeg|.png|.bmp'; //定义检查的图片类型
if(file_exists($imgPath)){
if($info = getimagesize($imgPath)) return 0;
$ext = image_type_to_extension($info['2']);
return stripos($types, $ext);
}else {
return false;
}
}
if(isImage($path)!==false){
echo '是图片';
}else {
echo '不是图片';
}
方法三:
读取图片的前 2 个字节,然后判断是不是图片
function isImage($imgPath){
$file = fopen($imgPath, "rb");
$bin = fread($file, 2); // 只读2字节
fclose($file);
// 标识前两个字符按照,c格式,数组索引chars1、chars2
$strInfo = unpack("C2chars", $bin);
$typeCode = intval($strInfo['chars1'].$strInfo['chars2']);
$fileType = '';
if($typeCode == 255216 /*jpg*/ || $typeCode == 7173 /*gif*/ || $typeCode == 13780 /*png*/) {
return $typeCode;
}else {
return false;
}
}
if(isImage($path)!==false){
echo '是图片';
}else {
echo '不是图片';
}
以上方法均已测试。