利用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数组函数
Aug 18 PHP
一个PHP并发访问实例代码
Sep 06 PHP
PHP Global定义全局变量使用说明
Aug 15 PHP
php警告Creating default object from empty value 问题的解决方法
Apr 02 PHP
PHP中使用虚代理实现延迟加载技术
Nov 05 PHP
PHPExcel内存泄漏问题解决方法
Jan 23 PHP
php 魔术常量详解及实例代码
Dec 04 PHP
PHP常见字符串处理函数用法示例【转换,转义,截取,比较,查找,反转,切割】
Dec 24 PHP
关于PHP中协程和阻塞的一些理解与思考
Aug 11 PHP
PHP实现正则表达式分组捕获操作示例
Feb 03 PHP
Laravel框架实现多数据库连接操作详解
Jul 12 PHP
TP框架实现上传一张图片和批量上传图片的方法分析
Apr 23 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
PHP4实际应用经验篇(1)
2006/10/09 PHP
两种设置php载入页面时编码的方法
2014/07/29 PHP
php实现的微信红包算法分析(非官方)
2015/09/25 PHP
PHP实现的redis主从数据库状态检测功能示例
2017/07/20 PHP
javascript  Error 对象 错误处理
2008/05/18 Javascript
为jQuery增加join方法的实现代码
2010/11/28 Javascript
jQuery学习笔记之jQuery动画效果
2013/09/09 Javascript
javascript引用赋值(地址传值)用法实例
2015/01/13 Javascript
JS+CSS实现仿支付宝菜单选中效果代码
2015/09/25 Javascript
大型JavaScript应用程序架构设计模式
2016/06/29 Javascript
vue实现可增删查改的成绩单
2016/10/27 Javascript
基于node.js实现微信支付退款功能
2017/12/19 Javascript
JavaScript剩余操作符Rest Operator详解
2019/07/20 Javascript
jQuery实现简单聊天室
2020/02/08 jQuery
基于JQuery实现页面定时弹出广告
2020/05/08 jQuery
[41:37]DOTA2北京网鱼队选拔赛——冲击职业之路
2015/04/13 DOTA
python笔记(2)
2012/10/24 Python
python多进程操作实例
2014/11/21 Python
python类继承与子类实例初始化用法分析
2015/04/17 Python
一张图带我们入门Python基础教程
2017/02/05 Python
python操作excel文件并输出txt文件的实例
2018/07/10 Python
python通过tcp发送xml报文的方法
2018/12/28 Python
使用Django连接Mysql数据库步骤
2019/01/15 Python
python爬虫学习笔记之Beautifulsoup模块用法详解
2020/04/09 Python
PyQt5通过信号实现MVC的示例
2021/02/06 Python
Canvas实现贝赛尔曲线轨迹动画的示例代码
2019/04/25 HTML / CSS
html5中使用hotcss.js实现手机端自适配的方法
2020/04/23 HTML / CSS
澳大利亚波西米亚风情网上商店:Czarina
2019/03/18 全球购物
学校消防演习方案
2014/02/19 职场文书
党校培训自我鉴定范文
2014/03/20 职场文书
党员个人剖析材料
2014/09/30 职场文书
工作骂脏话检讨书
2014/10/05 职场文书
三方合作意向书范本
2015/05/09 职场文书
纪律委员竞选稿
2015/11/19 职场文书
使用CSS3实现按钮悬停闪烁动态特效代码
2021/08/30 HTML / CSS