利用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 相关文章推荐
Apache2 httpd.conf 中文版
Nov 17 PHP
PHP 获取远程网页内容的代码(fopen,curl已测)
Jun 06 PHP
PHP通过正则表达式下载图片到本地的实现代码
Sep 19 PHP
destoon实现会员商铺中指定会员或会员组投放广告的方法
Aug 21 PHP
php实现mysql数据库分表分段备份
Jun 18 PHP
实例讲解PHP设计模式编程中的简单工厂模式
Feb 29 PHP
PHP模板引擎Smarty自定义变量调解器用法
Apr 11 PHP
php自定义函数实现汉字转换utf8编码的方法
Sep 29 PHP
php实现批量上传数据到数据库(.csv格式)的案例
Jun 18 PHP
php-msf源码详解
Dec 25 PHP
yii2实现Ueditor百度编辑器的示例代码
Nov 02 PHP
laravel 框架执行流程与原理简单分析
Feb 01 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获取数组中某元素的位置及array_keys函数应用
2013/01/29 PHP
PHP框架Laravel的小技巧两则
2015/02/10 PHP
PHP基于自定义函数实现的汉字转拼音功能实例
2017/09/30 PHP
php判断/计算闰年的方法小结【三种方法】
2019/07/06 PHP
你的编程语言可以这样做吗?
2006/09/07 Javascript
JavaScript 继承详解(四)
2009/07/13 Javascript
一款js和css代码压缩工具[附JAVA环境配置方法]
2010/04/16 Javascript
用jquery实现等比例缩放图片效果插件
2010/07/24 Javascript
js检验密码强度(低中高)附图
2014/06/05 Javascript
浅析JS异步加载进度条
2016/05/05 Javascript
jquery取消事件冒泡的三种方法(推荐)
2016/05/28 Javascript
javascript内存分配原理实例分析
2017/04/10 Javascript
js图片放大镜实例讲解(必看篇)
2017/07/17 Javascript
JS实现的简单拖拽购物车功能示例【附源码下载】
2018/01/03 Javascript
浅谈Vue初学之props的驼峰命名
2018/07/19 Javascript
React Native开发封装Toast与加载Loading组件示例
2018/09/08 Javascript
jQuery实现左右两个列表框的内容相互移动功能示例
2019/01/27 jQuery
vue 弹窗时 监听手机返回键关闭弹窗功能(页面不跳转)
2019/05/10 Javascript
jsonp跨域获取百度联想词的方法分析
2019/05/13 Javascript
微信小程序清空输入框信息与实现屏幕往上滚动的示例代码
2020/06/23 Javascript
[03:46]DOTA2英雄基础教程 维萨吉
2013/12/11 DOTA
python连接远程ftp服务器并列出目录下文件的方法
2015/04/01 Python
python中set常用操作汇总
2016/06/30 Python
Python中functools模块的常用函数解析
2016/06/30 Python
python正则实现计算器功能
2017/12/14 Python
用pyqt5 给按钮设置图标和css样式的方法
2019/06/24 Python
详解Python中的format格式化函数的使用方法
2019/11/20 Python
Django+python服务器部署与环境部署教程详解
2020/03/30 Python
Python的PIL库中getpixel方法的使用
2020/04/09 Python
Python pandas 列转行操作详解(类似hive中explode方法)
2020/05/18 Python
Python pip install之SSL异常处理操作
2020/09/03 Python
荷兰最大的多品牌男装连锁店:Adam Brandstore
2019/12/31 全球购物
学校花圃的标语
2014/06/18 职场文书
七一建党节演讲稿
2014/09/11 职场文书
2016幼儿教师自荐信范文
2016/01/28 职场文书
终止合同协议书范本
2016/03/22 职场文书