利用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 04 PHP
深入PHP变量存储的详解
Jun 13 PHP
解析VS2010利用VS.PHP插件调试PHP的方法
Jul 19 PHP
PHP生成不同颜色、不同大小的tag标签函数
Sep 23 PHP
php配合jquery实现增删操作具体实例
Dec 12 PHP
php中使用Ajax时出现Error(c00ce56e)的详细解决方案
Nov 03 PHP
PHP加密解密函数详解
Oct 28 PHP
PHP在线书签系统分享
Jan 04 PHP
PHP魔术方法使用方法汇总
Feb 14 PHP
PHP面向对象学习之parent::关键字
Jan 18 PHP
深入解析Laravel5.5中的包自动发现Package Auto Discovery
Sep 13 PHP
php常用的工具开发整理
Sep 26 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
推荐文章系统(一)
2006/10/09 PHP
PHP调用Linux的命令行执行文件压缩命令
2013/01/27 PHP
php smarty模板引擎的6个小技巧
2014/04/24 PHP
php设置页面超时时间解决方法
2015/09/22 PHP
PHP中通过getopt解析GNU C风格命令行选项
2019/11/18 PHP
laravel框架语言包拓展实现方法分析
2019/11/22 PHP
5 cool javascript apps
2007/03/24 Javascript
获取当前点击按钮的id用this.id实现
2014/03/17 Javascript
js实现键盘操作实现div的移动或改变的原理及代码
2014/06/23 Javascript
JS实现很酷的水波文字特效实例
2015/02/26 Javascript
JS实现弹性菜单效果代码
2015/09/07 Javascript
JavaScript驾驭网页-获取网页元素
2016/03/24 Javascript
在IE8上JS实现combobox支持拼音检索功能
2016/05/23 Javascript
全面解析Angular中$Apply()及$Digest()的区别
2016/08/04 Javascript
js仿腾讯QQ的web登陆界面
2016/08/19 Javascript
实例浅析js的this
2016/12/11 Javascript
jsTree事件和交互以及插件plugins详解
2017/08/29 Javascript
vue项目里面引用svg文件并给svg里面的元素赋值
2020/08/17 Javascript
使用python删除nginx缓存文件示例(python文件操作)
2014/03/26 Python
Python KMeans聚类问题分析
2018/02/23 Python
python矩阵转换为一维数组的实例
2018/06/05 Python
Python 实现数据结构-堆栈和队列的操作方法
2019/07/17 Python
浅析Python 引号、注释、字符串
2019/07/25 Python
python实现多线程端口扫描
2019/08/31 Python
python线性插值解析
2020/07/05 Python
英国最大的在线亚洲杂货店:Red Rickshaw
2020/03/22 全球购物
Solaris操作系统的线程机制
2012/12/23 面试题
毕业生的自我评价范文
2013/12/31 职场文书
庆八一活动方案
2014/01/25 职场文书
商务英语专业求职信范文
2014/01/28 职场文书
政风行风评议个人心得体会
2014/10/29 职场文书
少年犯观后感
2015/06/11 职场文书
教务处教学工作总结
2015/08/10 职场文书
2016年优秀团员事迹材料
2016/02/25 职场文书
react合成事件与原生事件的相关理解
2021/05/13 Javascript
SpringBoot整合Minio文件存储
2022/04/03 Java/Android