利用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 相关文章推荐
第三节--定义一个类
Nov 16 PHP
PHP如何得到当前页和上一页的地址?
Nov 27 PHP
php join函数应用
May 04 PHP
解析PHPExcel使用的常用说明以及把PHPExcel整合进CI框架的介绍
Jun 24 PHP
PHP嵌套输出缓冲代码实例
May 12 PHP
详细解读PHP中接口的应用
Aug 12 PHP
Symfony2实现从数据库获取数据的方法小结
Mar 18 PHP
Ubuntu彻底删除PHP7.0的方法
Jul 27 PHP
php中的explode()函数实例介绍
Jan 18 PHP
PHP发送邮件确认验证注册功能示例【修改别人邮件类】
Nov 09 PHP
使用PHP+Redis实现延迟任务,实现自动取消订单功能
Nov 21 PHP
宝塔面板在NGINX环境中TP5.1如何运行?
Mar 09 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
php实现httpclient类示例
2014/04/08 PHP
ThinkPHP中自定义目录结构的设置方法
2014/08/15 PHP
Yii2框架视图(View)操作及Layout的使用方法分析
2019/05/27 PHP
PHP开发api接口安全验证操作实例详解
2020/03/26 PHP
教您去掉ie网页加载进度条的方法
2010/12/09 Javascript
artDialog双击会关闭对话框的修改过程分享
2013/08/05 Javascript
JS获取url链接字符串 location.href
2013/12/23 Javascript
jQuery获取多种input值的简单实现方法
2016/06/20 Javascript
修改ligerui 默认确认按钮的方法
2016/12/27 Javascript
js实现多行文本框统计剩余字数功能
2017/03/28 Javascript
Vue.js实现一个SPA登录页面的过程【推荐】
2017/04/29 Javascript
总结JavaScript在IE9之前版本中内存泄露问题
2018/04/28 Javascript
用element的upload组件实现多图片上传和压缩的示例代码
2019/02/12 Javascript
javascript判断一个变量是数组还是对象
2019/04/10 Javascript
vue实现跨域的方法分析
2019/05/21 Javascript
[43:24]2018DOTA2亚洲邀请赛3月29日 小组赛A组 LGD VS Liquid
2018/03/30 DOTA
Python入门_条件控制(详解)
2017/05/16 Python
python3中获取文件当前绝对路径的两种方法
2018/04/26 Python
使用Python写一个量化股票提醒系统
2018/08/22 Python
Python中的CSV文件使用&quot;with&quot;语句的方式详解
2018/10/16 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
python里反向传播算法详解
2020/11/22 Python
Django 权限管理(permissions)与用户组(group)详解
2020/11/30 Python
巧用CSS3的calc()宽度计算做响应模式布局的方法
2018/03/22 HTML / CSS
html5组织文档结构_动力节点Java学院整理
2017/07/11 HTML / CSS
学校党员对照检查材料
2014/08/28 职场文书
县人大领导班子四风对照检查材料思想汇报
2014/10/09 职场文书
2014年药店店长工作总结
2014/11/17 职场文书
统招统分证明
2015/06/23 职场文书
婚礼上证婚人致辞
2015/07/28 职场文书
2015年度女工工作总结
2015/10/22 职场文书
PyCharm配置KBEngine快速处理代码提示冲突、配置命令问题
2021/04/03 Python
我对PyTorch dataloader里的shuffle=True的理解
2021/05/20 Python
使用Python的开发框架Brownie部署以太坊智能合约
2021/05/28 Python
win server2012 r2服务器共享文件夹如何设置
2022/06/21 Servers