利用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 抽象类的简单应用
Sep 06 PHP
PHP 获取文件路径(灵活应用__FILE__)
Feb 15 PHP
如何使用PHP实现javascript的escape和unescape函数
Jun 29 PHP
深入解析PHP中逗号与点号的区别
Aug 05 PHP
php Session存储到Redis的方法
Nov 04 PHP
Zend Framework教程之动作的基类Zend_Controller_Action详解
Mar 07 PHP
php进行ip地址掩码运算处理的方法
Jul 11 PHP
PHP实现文件下载【实例分享】
Apr 28 PHP
php实现的双色球算法示例
Jun 20 PHP
PHP判断json格式是否正确的实现代码
Sep 20 PHP
thinkphp3.2.0 setInc方法 源码全面解析
Jan 29 PHP
解决php写入数据库乱码的问题
Sep 17 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 magic_quotes_gpc的使用方法详解
2013/06/24 PHP
Code:loadScript( )加载js的功能函数
2007/02/02 Javascript
JavaScript Konami Code 实现代码
2009/07/29 Javascript
IE8 chrome中table隔行换色解决办法
2010/07/09 Javascript
jquery中dom操作和事件的实例学习-表单验证
2011/11/30 Javascript
JS实现悬浮移动窗口(悬浮广告)的特效
2013/03/12 Javascript
深入理解javascript的执行顺序
2014/04/04 Javascript
基于promise.js实现nodejs的promises库
2014/07/06 NodeJs
jquery小火箭返回顶部代码分享
2015/08/19 Javascript
JS中的eval 为什么加括号
2016/04/13 Javascript
jQuery向父辈遍历的简单方法
2016/09/18 Javascript
老生常谈jquery中detach()和remove()的区别
2017/03/02 Javascript
jQuery异步提交表单实例
2017/05/30 jQuery
electron demo项目npm install安装失败的解决方法
2018/02/06 Javascript
JavaScript变速动画函数封装添加任意多个属性
2019/04/03 Javascript
浅谈微信小程序列表埋点曝光指南
2019/10/15 Javascript
小程序登录之支付宝授权的实现示例
2019/12/13 Javascript
详解Webpack抽离第三方类库以及common解决方案
2020/03/30 Javascript
[05:08]顺网杯ISS-DOTA2赛歌 少女偶像Lunar青春演绎
2013/12/05 DOTA
python里大整数相乘相关技巧指南
2014/09/12 Python
Python实现把回车符\r\n转换成\n
2015/04/23 Python
django实现用户登陆功能详解
2017/12/11 Python
pycharm设置注释颜色的方法
2018/05/23 Python
django模板加载静态文件的方法步骤
2019/03/01 Python
python网络应用开发知识点浅析
2019/05/28 Python
如何在Django项目中引入静态文件
2019/07/26 Python
.img/.hdr格式转.nii格式的操作
2020/07/01 Python
意大利体育用品和运动服网上商店:Maxi Sport
2019/09/14 全球购物
Andrew Marc官网:设计师外套的领先制造商
2019/10/30 全球购物
面向中国市场的在线海淘美妆零售网站:Beauty House美丽屋
2021/03/02 全球购物
体育教师求职信
2014/06/30 职场文书
医院见习报告范文
2014/11/03 职场文书
2014年接待工作总结
2014/11/26 职场文书
新教师个人工作总结
2015/02/06 职场文书
新学期感想
2015/08/10 职场文书
考教师资格证不要错过的4个最佳时机
2019/07/17 职场文书