php判断是否是文件_PHP判断文件是否为图片文件的方法总结

近日在做图片处理方面的开发,看着这一片不错的文章,分享给大家。在网页设计中,如果需要图片,我们通常拿到的是一个图片的文件名。仅仅通过文件名是无法判断该文件是否是一个图片文件的。或许有的人以为通过后缀名就可以判断,别忘了文件的后缀名是可以随便改动的。更何况,在 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

/* 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

function read_all ($dir){

if(!is_dir($dir)) return false;

$handle = opendir($dir);

if($handle){

while(($fl = readdir($handle)) !== false){

$temp = $dir.DIRECTORY_SEPARATOR.$fl;

//如果不加  $fl!='.' && $fl != '..'  则会造成把$dir的父级目录也读取出来

if(!is_dir($temp) && $fl!='.' && $fl != '..'){

echo '文件:'.$temp.'
';

echo "
";

}

}

}

}

read_all('D:\phpstudy\WWW\table');

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/282975.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

盘点大厂的那些开源项目 - 滴滴出行

滴滴出行是涵盖出租车、 专车、滴滴快车、 顺风车、代驾及大巴、货运等多项业务在内的一站式出行平台。Nightingale 夜莺分类&#xff1a;监控系统夜莺是一套分布式高可用的运维监控系统&#xff0c;最大的特点是混合云支持&#xff0c;既可以支持传统物理机虚拟机的场景&#…

oracle 基本异常的练习及各个错误码

DECLAREv_deptno emp.deptno%TYPE :&deptno;v_sal emp.sal%TYPE;v_empno emp.empno%TYPE; BEGINSELECT sal INTO v_sal FROM emp WHERE deptno v_deptno;IF v_sal<1500 THEN UPDATE emp SET salsal100 WHERE empno v_empno; DBMS_OUTPUT.PUT_LINE(编码为||v_empno…

阿里巴巴发布智能运维故障管理AI+生态计划

摘要&#xff1a; 为响应马老师“家国情怀&#xff0c;世界担当”的号召&#xff0c;开放“AI”生态计划&#xff0c;将让集团内部服务过程中积累下的技术与经验更好地回馈社会&#xff0c;任何企业或合作伙伴均可以简单方便的接入阿里巴巴智能故障管理平台&#xff0c;通过对接…

tomcat 插件

1. http://www.eclipsetotale.com/tomcatPlugin.html

PHP使用for循环打出星号表格,console - JavaScript中,使用for循环输出如下图形(等腰三角形,和平行四边形)?原理是啥?...

小皮2017-04-11 13:13:591楼以下代码用了ES6,取名比较随意s就是space,空格的意思,n是要总次数,第二个参数是输出的图形第一个很简单,累加就好了//ES6function first(n,print "*"){for(let i 0; i < n ;i)console.log(i > 0 ? print.repeat(i 1) : print);}…

k8s 读书笔记 - Pod 的升级和回滚

Pod 升级可能面临的问题当集群中的某个服务需要升级时&#xff0c;我们需要停止目前与该服务相关的所有 Pod&#xff0c;然后下载新版本镜像并创建新的 Pod。但是当集群规模比较庞大时&#xff0c;那么这个工作就会变成一个挑战&#xff0c;而且先全部停止然后再逐步升级的方式…

WeakHashMap和Java引用类型详细解析

WeakHashMap是种弱引用的HashMap&#xff0c;这是说&#xff0c;WeakHashMap里的key值如果没有外部强引用&#xff0c;在垃圾回收之后&#xff0c;WeakHashMap的对应内容也会被移除掉。 1.1 Java的引用类型 在讲解WeakHashMap之前&#xff0c;我们需要了解Java中引用的相关类&…

KVOController代码分析和踩坑

KVOController是FaceBook的一个开源库&#xff0c;提供了方便的姿势让你去使用KVO。 github.com/facebook/KV… 大概的用法如下&#xff1a; [self.KVOController observe:target keyPath:keyPath options:NSKeyValueObservingOptionNew block:^(id observer, id object, NSDic…

java中compareto方法详解,Java中compareTo()方法的详解

例如&#xff1a;String a "abc";String b "abc";System.out.println("num "a.compareTo(b));a是String类型的字符串,它的比较用compareTo方法,它从第一位开始比较, 如果遇到不同的字符,则马上返回这两个字符的ascii值差值.返回值是int类型1.…

《ASP.NET Core 6框架揭秘》实例演示[21]:如何承载你的后台服务

借助 .NET提供的服务承载&#xff08;Hosting&#xff09;系统&#xff0c;我们可以将一个或者多个长时间运行的后台服务寄宿或者承载我们创建的应用中。任何需要在后台长时间运行的操作都可以定义成标准化的服务并利用该系统来承载&#xff0c;ASP.NET Core应用最终也体现为这…

使用DBCA工具创建自己的数据库

ylbtech-Oracle&#xff1a;使用DBCA工具创建自己的数据库 DBCA创建数据库 默认安装的Oracle数据库一般不能满足实际应用的需求&#xff0c;例如数据库名称、数据库块的大小等都需要修改&#xff0c;那么我们应该自己创建一个满足实际应用系统需要的Oracle数据实例&#xff08;…

免去架构算法调优,如何让你的系统风驰电掣?|图说

通用计算场景下的云服务器领域从来都是兵家必争之地&#xff0c;价格战曾打了一波又一波&#xff0c;可用户痛点却依然是“顽疾”。由于采用的基础硬件、架构和调优技术千差万别&#xff0c;类似配置的云服务器之间存有较大的性能差异。 但市面上五花八门的云服务器不绝于耳&am…

PHP URL的处理函数,php中url处理函数总结

在php中url处理函数有很多,如有:http_build_query,compact,urldecode、urlencode,parse_url,rawurldecode等等函数。http_build_query(PHP 5) http_build_query — 生成 URL-encode 之后的请求字符串,实例代码如下:$dataarray(foo>bar,baz>boom,cow>milk,php>hyper…

记一次 .NET 某数控机床控制程序 卡死分析

一&#xff1a;背景 1. 讲故事前段时间有位朋友微信上找到我&#xff0c;说它的程序出现了卡死&#xff0c;让我帮忙看下是怎么回事&#xff1f; 说来也奇怪&#xff0c;那段时间求助卡死类的dump特别多&#xff0c;被迫训练了一下对这类问题的洞察力 &#x1f604;&#x1f60…

TODO-MVP-Loaders源码体验

大家好&#xff0c;我是苍王。以下是我这个系列的相关文章&#xff0c;有兴趣可以参考一下&#xff0c;可以给个喜欢或者关注我的文章。[Android]如何做一个崩溃率少于千分之三噶应用app--章节列表相信有关注我的人&#xff0c;都会看过我上一编介绍的Todo-mvp源码体验&#xf…

.NET Framework 4.8预览

虽然人们的大多数关注点都在.NET Core上&#xff0c;但经典的.NET Framework仍然在开发中。.NET 4.8的“早期访问”预览版表明了微软最关心的领域包括高DIP、可访问性和并发性。\\.NET 4.8预计将于2019年发布。目前的预期是&#xff0c;它将在稍后的Windows 10 build 1607上运行…

java项目商品的排名,分析了5万个开源项目,得出的排名前16的Java工具类

原文:https://www.jianshu.com/p/9e937d178203在Java中&#xff0c;工具类定义了一组公共方法&#xff0c;这篇文章将介绍Java中使用最频繁及最通用的Java工具类。以下工具类、方法按使用流行度排名&#xff0c;参考数据来源于Github上随机选取的5万个开源项目源码。一. org.ap…

IDEA远程调试

参考链接&#xff1a;http://www.cnblogs.com/wy2325/p/5600232.html 调试端口是catlina.sh中的 JAVA_OPTS-agentlib:jdwptransportdt_socket,servery,suspendn,address5023 -Xms1024m -Xmx3072m -XX:MaxNewSize128m #!/bin/sh 配置的端口&#xff0c;是address ******&#…

ASP.NETCoreWeb开发之OptionsPattern

这节我们来讲一下&#xff0c;在ASP.NET Core Web开发中&#xff0c;读取配置文件信息的新方式&#xff1a;Options。前言 /Options在ASP.NET Web框架中&#xff0c;我们读取配置文件中的数据&#xff0c;在不使用第三方框架的情况下&#xff0c;可能需要通过ConfigurationMana…

SpringMVC执行流程图

2019独角兽企业重金招聘Python工程师标准>>> 转载于:https://my.oschina.net/u/2607324/blog/827946