利用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能有一定的帮助,如果有疑问大家可以留言交流。