利用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 网络开发详解之远程文件包含漏洞
Apr 25 PHP
解析PHP获取当前网址及域名的实现代码
Jun 23 PHP
php获取字段名示例分享
Mar 03 PHP
php使用正则表达式提取字符串中尖括号、小括号、中括号、大括号中的字符串
Apr 05 PHP
php获取中文拼音首字母类和函数分享
Apr 24 PHP
PHP小教程之实现链表
Jun 09 PHP
学习php开源项目的源码指南
Dec 21 PHP
PHP动态规划解决0-1背包问题实例分析
Mar 23 PHP
Yii实现单用户博客系统文章详情页插入评论表单的方法
Dec 28 PHP
mac下多个php版本快速切换的方法
Oct 09 PHP
PHP简单数据库操作类实例【支持增删改查及链式操作】
Oct 10 PHP
PHP使用glob方法遍历文件夹下所有文件的实例
Oct 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获取当前网址url并替换参数或网址的方法
2010/06/06 PHP
PHP按行读取、处理较大CSV文件的代码实例
2014/04/09 PHP
php采集自中央气象台范围覆盖全国的天气预报代码实例
2015/01/04 PHP
PHP pear安装配置教程
2016/05/14 PHP
PHP中-&gt;和=&gt;的含义及使用示例解析
2020/08/06 PHP
Dojo 学习笔记入门篇 First Dojo Example
2009/11/15 Javascript
js 变量类型转换常用函数与代码[比较全]
2009/12/01 Javascript
javascript 面向对象全新理练之数据的封装
2009/12/03 Javascript
javascript setTimeout()传递函数参数(包括传递对象参数)
2010/04/07 Javascript
jquery ui dialog ie8出现滚动条的解决方法
2010/12/06 Javascript
js 一个关于图片onload加载的事
2013/11/10 Javascript
js获取客户端操作系统类型的方法【测试可用】
2016/05/27 Javascript
详解Vue源码学习之callHook钩子函数
2018/07/25 Javascript
详解jQuery中的easyui
2018/09/02 jQuery
js html实现计算器功能
2018/11/13 Javascript
python简单分割文件的方法
2015/07/30 Python
python+requests+unittest API接口测试实例(详解)
2017/06/10 Python
python+opencv实现动态物体追踪
2018/01/09 Python
Python3实现爬取指定百度贴吧页面并保存页面数据生成本地文档的方法
2018/04/22 Python
使用PM2+nginx部署python项目的方法示例
2018/11/07 Python
Django接收自定义http header过程详解
2019/08/23 Python
Pyecharts绘制全球流向图的示例代码
2020/01/08 Python
如何基于python实现年会抽奖工具
2020/10/20 Python
CSS3 选择器 属性选择器介绍
2012/01/21 HTML / CSS
2019史上最全Database工程师题库
2015/12/06 面试题
医学专业毕业生个人的求职信
2013/12/04 职场文书
即将毕业大学生自荐信
2014/01/24 职场文书
酒店员工培训方案
2014/06/02 职场文书
党性锻炼的心得体会
2014/09/03 职场文书
心得体会的写法
2014/09/05 职场文书
2014年卫生保健工作总结
2014/12/08 职场文书
2015年爱牙日活动总结
2015/03/23 职场文书
Python爬虫之爬取哔哩哔哩热门视频排行榜
2021/04/28 Python
Python数据分析之pandas读取数据
2021/06/02 Python
Python OpenCV 彩色与灰度图像的转换实现
2021/06/05 Python
如何使用pdb进行Python调试
2021/06/30 Python