利用PHP判断文件是否为图片的方法总结


Posted in PHP onJanuary 06, 2017

前言

在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名。仅仅通过文件名是无法判断该文件是否是一个图片文件的。或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的。更何况,在 Linux 系统下是不以后缀来区分文件格式的。如果天真的以为通过后缀名就能区分图片,那可能出现错误时,你连错误在哪儿都不知道。比如有一个讨厌的人把一个文本文件改成 background.jpg,然后给你用,你可能只会简单的认为这个图片被损坏了,万万没想到它竟然仅仅是一个文本文件。

为了避免一些不必要的问题出现,在拿到一个图片时,应该正确的判断该文件是否真的一个图片文件。这里总结了三种判断方法,有需要的朋友们可以一起来看看吧。

方法一

利用 getimagesize 函数获取图片信息,然后进行判断:

<?php # Script -- isimg.php

/* Author @ Huoty
 * Date @ 2015-11-24 16:59:26
 * Brief @ 
 */

function isImage($filename)
{
 $types = '.gif|.jpeg|.png|.bmp'; //定义检查的图片类型
 if(file_exists($filename))
 {
  if (($info = @getimagesize($filename))
   return 0;
  
  $ext = image_type_to_extension($info['2']);
  return stripos($types,$ext);
 }
 else
 {
  return false;
 }
}
 
if(isImage('isimg.txt')!==false)
{
 echo isImage('1.jpg');
 echo '是图片';
}
else
{
 echo '不是图片';
}
?>

方法二

读取图片的前 2 个字节,然后判断是不是图片:

<?php # Script -- isimg2.php

/* Author @ Huoty
 * Date @ 2015-11-25 16:42:38
 * Brief @ 
 */

//判断上传的是不是图片 
function isImg($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格式的图片!'; 
  return false; 
 } 
} 

if (isImg("1.jpg"))
{
 echo "是图片";
}
else
{
 echo "不是图片";
}
?>

方法三

最后一种方法是利用 exif_imagetype 函数,该函数用于判断一个图像的类型,采用这种方法更加简单。读取一个图像的第一个字节并检查其签名。 如果发现了恰当的签名则返回一个对应的常量,否则返回 FALSE。返回值和 getimagesize() 返回的数组中的索引 2 的值是一样的,但该函数要快得多。

该函数的返回值常量定义如下:

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

示例:

<?php # Script -- isimg3.php

/* Author @ Huoty
 * Date @ 2015-11-25 16:53:04
 * Brief @ 
 */

$mimetype = exif_imagetype("1.jpg");
if ($mimetype == IMAGETYPE_GIF || $mimetype == IMAGETYPE_JPEG || $mimetype == IMAGETYPE_PNG || $mimetype == IMAGETYPE_BMP)
{
 echo "是图片";
}
?>

总结

以上就是关于PHP判断文件是否为图片的全部内容了,希望本文的内容对大家学习或者使用PHP能有一定的帮助,如果有疑问大家可以留言交流。

PHP 相关文章推荐
php设计模式 Facade(外观模式)
Jun 26 PHP
浅析php插件 HTMLPurifier HTML解析器
Jul 01 PHP
Php无限级栏目分类读取的实现代码
Feb 19 PHP
php实现telnet功能示例
Apr 08 PHP
新浪SAE搭建PHP项目教程
Jan 28 PHP
php获取发送给用户的header信息的方法
Mar 16 PHP
隐藏Nginx或Apache以及PHP的版本号的方法
Jan 03 PHP
Zend Framework框架教程之Zend_Db_Table_Rowset用法实例分析
Mar 21 PHP
php pdo操作数据库示例
Mar 10 PHP
PHP实现阿里大鱼短信验证的实例代码
Jul 10 PHP
PHP小白必须要知道的php基础知识(超实用)
Oct 10 PHP
php+js实现点赞功能的示例详解
Aug 07 PHP
基于thinkPHP类的插入数据库操作功能示例
Jan 06 #PHP
PHP 文件上传后端处理实用技巧方法
Jan 06 #PHP
PHP+mysql实现从数据库获取下拉树功能示例
Jan 06 #PHP
php中简单的对称加密算法实现
Jan 05 #PHP
WAF的正确bypass
Jan 05 #PHP
phpcms的分类名称和类别名称的调用
Jan 05 #PHP
php 5.4 全新的代码复用Trait详解
Jan 05 #PHP
You might like
PHP开发文件系统实例讲解
2006/10/09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
2007/03/20 PHP
利用php实现禁用IE和火狐的缓存问题
2012/12/03 PHP
php强制下载文件函数
2016/08/24 PHP
php 常用的系统函数
2017/02/07 PHP
Yii2框架自定义验证规则操作示例
2019/02/08 PHP
json 定义
2008/06/10 Javascript
jQuery学习5 jQuery事件模型
2010/02/07 Javascript
无缝滚动js代码通俗易懂(自写)
2013/06/19 Javascript
JavaScript获取图片的原始尺寸以宽度为例
2014/05/04 Javascript
node.js回调函数之阻塞调用与非阻塞调用
2015/11/13 Javascript
一个仿微博登陆邮箱提示框js开发案例
2016/07/28 Javascript
javascript实现的上下无缝滚动效果
2016/09/19 Javascript
javascript垃圾收集机制的原理分析
2016/12/08 Javascript
angularjs实现table增加tr的方法
2018/02/27 Javascript
微信小程序实现订单倒计时
2020/11/01 Javascript
JavaScript中判断为整数的多种方式及保留两位小数的方法
2019/09/09 Javascript
python在linux系统下获取系统内存使用情况的方法
2015/05/11 Python
Python装饰器用法实例分析
2019/01/14 Python
Python Numpy库datetime类型的处理详解
2019/07/13 Python
python导入库的具体方法
2020/06/18 Python
艺龙旅行网酒店预订:国内、港澳台酒店
2018/06/26 全球购物
ghd法国官方网站:英国最受欢迎的美发工具品牌
2019/04/18 全球购物
马来西亚在线购物市场:PGMall.my
2019/10/13 全球购物
俄罗斯购买剧院和演唱会门票网站:Parter.ru
2019/11/09 全球购物
个人评语大全
2014/05/04 职场文书
李敖北大演讲稿
2014/05/24 职场文书
银行优秀员工事迹材料
2014/05/29 职场文书
依法行政工作汇报材料
2014/10/28 职场文书
新员工考核评语
2014/12/31 职场文书
男方婚前保证书
2015/02/28 职场文书
房地产置业顾问岗位职责
2015/04/11 职场文书
2016庆祝国庆67周年宣传语
2015/11/25 职场文书
调研报告的主要写法
2019/04/18 职场文书
Go 实现英尺和米的简单单位换算方式
2021/04/29 Golang
Python实现制作销售数据可视化看板详解
2021/11/27 Python