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

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

  1. python显示文件夹图片_python遍列目录搜索文件夹及子文件夹图片文件

    自本人从事汽车配件销售工作以为,收集了很多零配件图片,超级多,每次在Window视窗搜索指定名称的图片时很耗时,超级超级的慢,实在受不了了,决定用Sqlite3将所有图片的地址存储,然后用做一个页面来 ...

  2. 图片文件转base64和base64转图片文件

    一.图片文件转base64 function imgFileToBase64(){//$img = 'D:\xampp\git-new\wshifu-apps\service\assets\logo_ ...

  3. android webview 多文件上传,Android网页WebView图片文件上传的问题

    Android网页WebView图片文件上传的问题 发布时间:2020-07-13 22:48:15 来源:51CTO 阅读:5922 作者:拾荒者老大 在安卓下,webview上传图片点击是没用的, ...

  4. php中如何判断目录是否存在文件_PHP判断指定目录下是否存在文件

    这篇文章介绍的内容是关于PHP判断指定目录下是否存在文件 ,有着一定的参考价值,现在分享给大家,有需要的朋友可以参考一下/* 功能:判断某个目录下是否存在文件: 参数:$path -- 要进行判断的目 ...

  5. php 判断当前手机类型_PHP 判断当前访问设备是电脑还是手机

    PHP 判断当前访问设备是电脑还是手机 2020年07月28日 | 萬仟网IT编程 | 我要评论 function is_mobile(){ $regex_match="/(nokia|ip ...

  6. php 判断来源 微信客户端_PHP判断手机端、PC端 、微信代码实例

    欢迎大家关注我的其他Github博客和CSDN博客,互相交流! 在这里博主为大家分享了PHP判断的两个实例,一是PHP判断是手机端还是PC端,二是PHP判断是否是微信浏览器,供大家参考,具体内容如下 ...

  7. php判断小数点的长度_PHP 判断字符串是否为整数、数字、不含小数点

    PHP 用正则表达式判断字符串是否为整数,若字符串未定义.未赋值.或者带有小数点验证均会提示不是整数 $Number="1"; if(preg_match("/^-?\d ...

  8. php防止文件盗链,PHP如何禁止图片文件的被盗链

    1.假设充许连结图片的主机域名为:www.test.com 2.修改httpd.conf SetEnvIfNoCase Referer "^http://www.test.com/" ...

  9. 利用Python对文件进行批量重命名——以图片文件为例

    效果如下:0001号用户的第 i 张图片 代码: import osclass ImageRename():def __init__(self):self.path = 'C:/Users/lbpen ...

最新文章

  1. python内置库之学习ctypes库(三)--调用Win32API
  2. Python字符编码详解
  3. SimpleDateFormat线程不安全
  4. 关于ipconfig中setclassid的初步认识
  5. Ruby常用比较操作符
  6. why some product does not have Note assignment block
  7. 使用ABAP事务码STAD分析Asynchronous RFC call性能
  8. 数据库范式(1NF 2NF 3NF BCNF)详解
  9. 前端学习(1898)vue之电商管理系统电商系统之渲染用户的对话框
  10. ContentProvider和Uri详解
  11. 移动端 html5领奖页面,HTML5移动端交互
  12. Linux MySQL主主复制(Replication)(MySQL数据双向同步)配置
  13. spring cloud gateway 之限流篇
  14. 【数据库】MySql分割字符串
  15. STM32 易阅读的代码风格
  16. C语言程序——小数的四舍五入
  17. android 高德地图 logo,Android高德之旅(3)UI Setting
  18. 哇塞!这是我见过的最牛逼的性能监控系统,集强大功能于一身~
  19. 网站优化关键词密度多少才是最合适的?
  20. 关于阻容耦合电路及阻容耦合分压

热门文章

  1. ABP Framework:移除 EF Core Migrations 项目,统一数据上下文
  2. C sharp实例:华盾武器门数据接收和解析
  3. C# this关键字的3种用法
  4. WPF使用Animation仿WeChat(微信)播放语音消息
  5. 【Azure Show】|第九期 “我的计算机入门之路” 嘉宾秦婷婷汪宇杰文轩
  6. .NET 5 自身就是一个 .NET Standard
  7. 跟我一起学.NetCore之依赖注入
  8. 给 ABP vNext 应用安装私信模块
  9. 一文读懂 Copyleft 开源许可证
  10. 不要错过这轮疫情的“洗牌”机会