利用PHP判断文件是否为图片的方法总结
前言
在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名。仅仅通过文件名是无法判断该文件是否是一个图片文件的。或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的。更何况,在Linux系统下是不以后缀来区分文件格式的。如果天真的以为通过后缀名就能区分图片,那可能出现错误时,你连错误在哪儿都不知道。比如有一个讨厌的人把一个文本文件改成background.jpg,然后给你用,你可能只会简单的认为这个图片被损坏了,万万没想到它竟然仅仅是一个文本文件。
为了避免一些不必要的问题出现,在拿到一个图片时,应该正确的判断该文件是否真的一个图片文件。这里总结了三种判断方法,有需要的朋友们可以一起来看看吧。
方法一
利用getimagesize函数获取图片信息,然后进行判断:
<?php#Script--isimg.php /*Author@Huoty *Date@2015-11-2416:59:26 *Brief@ */ functionisImage($filename) { $types='.gif|.jpeg|.png|.bmp';//定义检查的图片类型 if(file_exists($filename)) { if(($info=@getimagesize($filename)) return0; $ext=image_type_to_extension($info['2']); returnstripos($types,$ext); } else { returnfalse; } } if(isImage('isimg.txt')!==false) { echoisImage('1.jpg'); echo'是图片'; } else { echo'不是图片'; } ?>
方法二
读取图片的前2个字节,然后判断是不是图片:
<?php#Script--isimg2.php /*Author@Huoty *Date@2015-11-2516:42:38 *Brief@ */ //判断上传的是不是图片 functionisImg($fileName) { $file=fopen($fileName,"rb"); $bin=fread($file,2);//只读2字节 fclose($file); $strInfo=@unpack("C2chars",$bin); $typeCode=intval($strInfo['chars1'].$strInfo['chars2']); $fileType=''; if($typeCode==255216/*jpg*/||$typeCode==7173/*gif*/||$typeCode==13780/*png*/) { return$typeCode; } else { //echo'"仅允许上传jpg/jpeg/gif/png格式的图片!'; returnfalse; } } if(isImg("1.jpg")) { echo"是图片"; } else { echo"不是图片"; } ?>
方法三
最后一种方法是利用exif_imagetype函数,该函数用于判断一个图像的类型,采用这种方法更加简单。读取一个图像的第一个字节并检查其签名。如果发现了恰当的签名则返回一个对应的常量,否则返回FALSE。返回值和getimagesize()返回的数组中的索引2的值是一样的,但该函数要快得多。
该函数的返回值常量定义如下:
1IMAGETYPE_GIF 2IMAGETYPE_JPEG 3IMAGETYPE_PNG 4IMAGETYPE_SWF 5IMAGETYPE_PSD 6IMAGETYPE_BMP 7IMAGETYPE_TIFF_II(Intel字节顺序) 8IMAGETYPE_TIFF_MM(Motorola字节顺序) 9IMAGETYPE_JPC 10IMAGETYPE_JP2 11IMAGETYPE_JPX 12IMAGETYPE_JB2 13IMAGETYPE_SWC 14IMAGETYPE_IFF 15IMAGETYPE_WBMP 16IMAGETYPE_XBM
示例:
<?php#Script--isimg3.php /*Author@Huoty *Date@2015-11-2516:53:04 *Brief@ */ $mimetype=exif_imagetype("1.jpg"); if($mimetype==IMAGETYPE_GIF||$mimetype==IMAGETYPE_JPEG||$mimetype==IMAGETYPE_PNG||$mimetype==IMAGETYPE_BMP) { echo"是图片"; } ?>
总结
以上就是关于PHP判断文件是否为图片的全部内容了,希望本文的内容对大家学习或者使用PHP能有一定的帮助,如果有疑问大家可以留言交流。